2016-07-07 22 views
6

Questo sta utilizzando il nucleo di asp.net con il nucleo della struttura di identità ed entità. Sto lavorando su un'applicazione saas in cui dispongo di un'app di amministrazione Web separata in cui è possibile aggiungere nuovi titolari al sistema. Dopo che un tenant è stato creato, l'app crea un database predefinito (database per database impostato) per il nuovo titolare. Voglio aggiungere un utente predefinito a questo nuovo database, ma sto lottando con la creazione di user manager al di fuori del sistema di iniezione delle dipendenze.Creazione di un UserManager al di fuori del sistema di integrazione delle dipendenze incorporato

L'app Web di amministrazione utilizza il gestore utenti creato in startup.cs (tramite il sistema DI integrato) come gestore dell'app di amministrazione. Quando vado ad aggiungere l'utente al nuovo database dei tenant, non sto utilizzando il sistema DI, ma voglio solo creare un UserManager con IdentityDbContext associato alla stringa di connessione per il nuovo database dei tenant.

sto sto usando questo dopo un nuovo inquilino si crea in app admin:

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>(......... 
    } 
} 

L'UserManager parametri di costruzione contengono elementi che non riesco a trovare esempi su quali casi dovrei usare. Alcune interfacce sembrano avere implementazioni predefinite, ma non sono sicuro se questo è il modo di procedere (o di passare null). Il costruttore è:

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) 

Guardando la fonte dell'identità sembra che posso passare nulla in per alcuni di questi parametri ma voglio essere sicuro di capire che cosa sta succedendo qui in modo da non faccio niente in modo non corretto .

La fonte per la gestione utenti è qui: https://github.com/aspnet/Identity/blob/dev/src/Microsoft.AspNetCore.Identity/UserManager.cs

Grazie, Brian

risposta

6

Dopo guardando attraverso la fonte di identità è possibile passare null per ottenere i risultati corretti. Avrei dovuto provare prima questo.