2016-10-03 4 views
0

Also versuche ich meine Anwendung für die Verwendung von Simple Injector mit Microsoft ASP.NET.Identity Standard, aber ich kann es nicht funktionieren. Ich habe mir verschiedene Quellen angeschaut wie hier: https://simpleinjector.codeplex.com/discussions/564822Simple Injector - ApplicationSignInManager wird als transient registriert, implementiert aber IDisposable

Aber ich habe noch einen weiteren Snap mit dem SignInManager getroffen. Die vollständige Fehlermeldung, die ich erhalte, lautet wie folgt:

Die Konfiguration ist ungültig. Die folgenden Diagnosewarnungen wurden gemeldet:

- [Einweg-Übergangskomponente] ApplicationSignInManager wird als vorübergehend registriert, implementiert jedoch IDisposable.

Weitere Informationen zu den Warnungen finden Sie in der Fehlereigenschaft. Bitte lesen Sie https://simpleinjector.org/diagnostics, um Probleme zu beheben und einzelne Warnungen zu unterdrücken.

Ich sah mich um und ich sah, dass ich diese Zeile DI die SignInManager hinzufügen könnte:

RegisterPerWebRequest<SignInManager<ApplicationUser, string>, ApplicationSignInManager>(); 

Allerdings, wenn ich das tue ich viel mehr Fehler auftreten, die wie so aussehen:

Die Konfiguration ist ungültig. Die folgenden Diagnosewarnungen wurden gemeldet:

- [Kurzgeschlossene Abhängigkeit] AccountController ist möglicherweise nicht vom nicht registrierten Typ ApplicationSignInManager (Transient) anstelle von SignInManager (Webanforderung) abhängig.

- [Kurze umschriebene Abhängigkeit] ManageController hängt möglicherweise nicht vom nicht registrierten Typ ApplicationSignInManager (Transient) ab, sondern von SignInManager (Webanforderung).

- [Einweg-Übergangskomponente] ApplicationSignInManager wird als vorübergehend registriert, implementiert jedoch IDisposable.

- [Ambiguous Lifestyles] Die Registrierung für ApplicationSignInManager (Transient) entspricht derselben Implementierung (ApplicationSignInManager) wie die Registrierung für SignInManager (Webanforderung), aber die Registrierung entspricht einem anderen Lebensstil. Dies führt dazu, dass jede Registrierung zu einer anderen Instanz aufgelöst wird.

- [Ambiguous Lifestyles] Die Registrierung für SignInManager (Webanforderung) entspricht derselben Implementierung (ApplicationSignInManager) wie die Registrierung für ApplicationSignInManager (Transient), aber die Registrierung entspricht einem anderen Lebensstil. Dies führt dazu, dass jede Registrierung zu einer anderen Instanz aufgelöst wird.

Weitere Informationen zu den Warnungen finden Sie in der Fehlereigenschaft. Bitte lesen Sie https://simpleinjector.org/diagnostics, um Probleme zu beheben und einzelne Warnungen zu unterdrücken.

Ich weiß nicht, wie ich den SignInManager einrichten soll, damit ich ihn mit meiner Anwendung arbeiten kann.

sieht Ihr Konto Controller wie folgt aus:

public class AccountController : Controller 
{ 
    private ApplicationSignInManager _signInManager; 
    private ApplicationUserManager UserManager; 

    public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager) 
    { 
     UserManager = userManager; 
     SignInManager = signInManager; 
    } 

    public ApplicationSignInManager SignInManager 
    { 
     get 
     { 
      return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>(); 
     } 
     private set { _signInManager = value; } 
    } 
} 

Und mein Inialiser für Simple Injector wie folgt aus:

public static class SimpleInjectorInitializer 
{ 
    public static Container Initialize(IAppBuilder app) 
    { 
     var container = GetInitializeContainer(app); 

     container.Verify(); 

     DependencyResolver.SetResolver(
      new SimpleInjectorDependencyResolver(container)); 

     return container; 
    } 

    private static Container GetInitializeContainer(IAppBuilder app) 
    { 
     var container = new Container(); 

     container.RegisterSingleton(app); 

     container.RegisterPerWebRequest<ApplicationUserManager>(); 

     container.RegisterPerWebRequest(() => new ApplicationDbContext(
      "connectionString")); 

     container.RegisterPerWebRequest<IUserStore<ApplicationUser>>(() => 
      new UserStore<ApplicationUser>(
       container.GetInstance<ApplicationDbContext>())); 

     container.RegisterInitializer<ApplicationUserManager>(
      manager => InitializeUserManager(manager, app)); 

     container.RegisterMvcControllers(Assembly.GetExecutingAssembly()); 

     container.Register<IAuthorisationManager, AuthorisationManager>(
      Lifestyle.Transient); 
     container.Register<IAuthorisationRepository, AuthorisationRepository>(
      Lifestyle.Transient); 

     container.RegisterPerWebRequest<SignInManager<ApplicationUser, string>, 
      ApplicationSignInManager>(); 

     container.RegisterPerWebRequest(() => 
      AdvancedExtensions.IsVerifying(container) 
       ? new OwinContext(new Dictionary<string, object>()).Authentication 
       : HttpContext.Current.GetOwinContext().Authentication); 

     return container; 
    } 

    private static void InitializeUserManager(ApplicationUserManager manager, IAppBuilder app) 
    { 
     manager.UserValidator = new UserValidator<ApplicationUser>(manager) 
     { 
      AllowOnlyAlphanumericUserNames = false, 
      RequireUniqueEmail = true 
     }; 

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

     var dataProtectionProvider = app.GetDataProtectionProvider(); 

     if (dataProtectionProvider != null) 
     { 
      manager.UserTokenProvider = 
       new DataProtectorTokenProvider<ApplicationUser>(
        dataProtectionProvider.Create("ASP.NET Identity")); 
     } 
    } 
} 

Kann mir einfach Injector verwenden jemand helfen mein SignInManager registrieren?

Antwort

0

Ich habe nicht das richtige Zeichen in Manager zu meinen Controller injiziert:

public class AccountController : Controller 
    { 
     private SignInManager<ApplicationUser, string> SignInManager; 
     private ApplicationUserManager UserManager; 

     public AccountController(ApplicationUserManager userManager, SignInManager<ApplicationUser, string> signInManager) 
     { 
      UserManager = userManager; 
      SignInManager = signInManager; 
     } 
    } 

Obwohl ich jetzt eine Parameteranzahl Mismatch Problem bekommen beim Start, die ich suche in

Verwandte Themen