带有Identity的ASP.NET Core上的存储库模式

时间:2017-09-04 14:31:52

标签: asp.net-core asp.net-identity

如何使用ASP.NET核心标识实现存储库模式?

我找到了一个solution来实现一个使用ASP.NET Core的Repository模式,但是如果你也在使用Identity框架,那就不行了。

我唯一看到的是使用两个独立的数据库:一个用于Identity表,另一个用于商业数据,但我想知道是否可以在ASP上为单个数据库实现存储库模式。带有身份的.NET Core项目。

1 个答案:

答案 0 :(得分:0)

您可以将Autofac用作asp.net核心中的依赖项注入。以下是有关如何在Asp.net身份项目中使用Autofac的文档:Doc

在Startup.cs中首先在您的服务中添加身份

services.AddIdentity<User,IdentityRole>().AddDefaultTokenProviders();

以此类推,您可以在服务层中注册一个模块(或在存储库模式中命名的任何名称),并在注册DbContext和服务后对其进行配置:

var dbContextParameter = new ResolvedParameter((pi, ctx) => pi.ParameterType == typeof(IdentityDbContext),
                                                        (pi, ctx) => ctx.Resolve<DatabaseContext>());

            builder.RegisterType<UserStore<User, IdentityRole<Guid>, DatabaseContext, Guid>>()
                .As<IUserStore<User>>().WithParameter(dbContextParameter).InstancePerLifetimeScope();

            builder.RegisterType<UserManager<User>>()
                .As<UserManager<User>>().WithParameter(dbContextParameter).InstancePerLifetimeScope();

            builder.RegisterType<SignInManager<User>>()
                .As<SignInManager<User>>().WithParameter(dbContextParameter).InstancePerLifetimeScope();

            builder.RegisterType<RoleStore<IdentityRole>>()
                .As<IRoleStore<IdentityRole>>().WithParameter(dbContextParameter).InstancePerLifetimeScope();

上面的代码是注册UserStore的方法,您可以使UserManager,SignInManager和其他类似这样的类

请注意,您可以像这样将服务注册为其实现的接口:

var Service = Assembly.GetExecutingAssembly();
builder.RegisterAssemblyTypes(Service)
                   .AsImplementedInterfaces();

然后您可以像这样将身份服务注入到服务构造函数中:

 public UserService(Data.IRepositoryX<User> repository, IUnitOfWorkDatabaseContext unit, SignInManager<User> signInManager) : base(repository)
    {

    }