2016-07-07 73 views
6

这是使用具有标识和实体框架核心的asp.net核心。我在一个saas应用程序中工作,我有一个单独的管理web应用程序,您可以在其中添加新的租户到系统。创建租户后,应用程序会为新租户创建一个默认数据库(为每个租户设置数据库)。我想添加一个默认用户到这个新的数据库,但我努力在依赖注入系统之外创建用户管理器。在内置依赖注入系统之外创建UserManager

admin web应用程序使用startup.cs中创建的用户管理器(通过内置的DI系统)作为管理员应用程序的管理器。当我将用户添加到新的租户数据库时,我没有使用DI系统我只想创建一个UserManager,其中包含与新租户数据库的连接字符串关联的IdentityDbContext。

我是一名新房客在管理应用程序创建后,使用此:

public class TenantDbInitializer 
{ 
    private Tenant tenant; 
    private ApplicationDbContext context; 

    private UserManager<ApplicationUser> userManager; 

    public TenantDbInitializer(Tenant tenant) 
    { 
     this.tenant = tenant; 
    } 

    public void Init() 
    { 
     // tenant contains connection string 
     context = new ApplicationDbContext(tenant); 

     var userStore = new UserStore<ApplicationUser>(context); 

     userManager = new UserManager<ApplicationUser>(......... 
    } 
} 

的建设的UserManager参数包含,我无法找到我应该用什么实例的实例项目。一些接口似乎有默认的实现,但我不确定这是否继续(或传递null)的方式。构造函数是:

public UserManager(IUserStore<TUser> store, 
     IOptions<IdentityOptions> optionsAccessor, 
     IPasswordHasher<TUser> passwordHasher, 
     IEnumerable<IUserValidator<TUser>> userValidators, 
     IEnumerable<IPasswordValidator<TUser>> passwordValidators, 
     ILookupNormalizer keyNormalizer, 
     IdentityErrorDescriber errors, 
     IServiceProvider services, 
     ILogger<UserManager<TUser>> logger) 

它看来,我可以在一些参数传递null身份源寻找,但我要确保我明白是怎么回事就在这里,所以我不会做任何不正确。

用户管理器源是在这里: https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/UserManager.cs

感谢, 布赖恩

回答

6

通过身份源看后,你可以在通过空,以获得正确的结果。应该先尝试一下。