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

问题描述 投票:1回答:1

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

我找到了一个solution来实现一个使用ASP.NET Core的Repository模式,但是如果你也使用了Identity框架则没有。

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

asp.net-core asp.net-identity
1个回答
0
投票

您可以在asp.net核心中使用Autofac作为依赖注入。这里是关于如何在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)
    {

    }
© www.soinside.com 2019 - 2024. All rights reserved.