2015-11-17 21 views
9

sto usando asp.net MVC 5 con provider esterno Owin fornire (facebook, twitter)ApplicationUserManager.Create chiamato su ogni richiesta

ApplicationUserManager.Create viene chiamato su ogni richiesta. C'è un sacco di roba inutile per clienti registrati in là (configurazione validatore password o sms e servizio di posta elettronica confgurazione ....)

var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>())); 
      // Configure validation logic for usernames 
      manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
      { 
       AllowOnlyAlphanumericUserNames = true, 
       RequireUniqueEmail = true 
      }; 

      // Configure validation logic for passwords 
      manager.PasswordValidator = new PasswordValidator 
      { 
       RequiredLength = 7, 
       RequireNonLetterOrDigit = false, 
       RequireDigit = true, 
       RequireLowercase = true, 
       RequireUppercase = true, 
      }; 
... 

Inoltre, penso che abbia qualcosa a che fare con questo

public partial class Startup 
    {  
     public void ConfigureAuth(IAppBuilder app) 
     // Configure the db context, user manager and signin manager to use a single instance per request 
     app.CreatePerOwinContext(ApplicationDbContext.Create); 
     app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create); 
     app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create); 
... 

Cosa posso fare per avere questo "creare" chiamato solo quando necessario. Non voglio creare un'istanza della password validatore e altre cose in là quando non richiesto

Grazie

+2

hai mai scoperto perché? Ho a che fare anche con questo. – prospector

risposta

0

Personalmente, utilizzando CreatePerOwinContext non è sicuramente consigliato in questo caso. Dovresti solo inizializzare DbContext, UserManager e SignInManager una volta e lasciare che EF e MVC determinino quando è necessario un nuovo contesto. MVC 5 e versioni più recenti utilizzano in modo più efficace l'iniezione di dipendenza (DI), eliminando così la necessità di disporre di singole istanze per contesto.

Solo quando si dispone di codice che deve essere considerato critico e richiede un nuovo contesto, è necessario farlo in quella specifica sezione di codice e non in tutto il sito.