Ich versuche, einen benutzerdefinierten Manager zu erstellen, der in der Steuerung übergeben wird, wenn es aufgerufen wird, und ich habe Probleme, die aktuelle Implementierung des neuen MVC5-Projekts in C# zu verstehen. HierKonstruktor Parameter auf Controller-Aktionen
ist die Standardimplementierung:
public AccountController(ApplicationUserManager userManager, ApplicationSignInManager signInManager)
{
UserManager = userManager;
SignInManager = signInManager;
}
über all das sind Erklärungen für sie:
public ApplicationSignInManager SignInManager
{
get
{
return _signInManager ?? HttpContext.GetOwinContext().Get<ApplicationSignInManager>();
}
private set
{
_signInManager = value;
}
}
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
nun von meinem Verständnis der SignInManager und Usermanager erstellt werden, wenn Anwendung zum ersten erstellt wird Zeit in Startup.Auth.cs, die wie folgt aussieht:
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);
So, jetzt, wenn ich UserManager aufrufen, bekomme ich die erste Instanz, die erstellt wurde, als das Projekt zum ersten Mal ausgeführt wurde.
Ich habe 2 Fragen. Frage 1 ist, was ich oben falsch gesagt habe und habe ich ein falsches Verständnis davon, wie MVC5 funktioniert?
Frage2: Wie werden UserManager und SignInManager im Controller generiert und übergeben? Wo ist der Code, der diese erste Instanz des Managers erstellt und im Controller übergibt? Ich gehe davon aus, dass es app.CreatePerOwnContext that does it
ist. Wenn ja, kann ich dann einfach meinen eigenen Manager erstellen und ihn dann auf dieselbe Weise bei Owin registrieren und während des gesamten Projekts wiederverwenden? Erhält mein Code die neuesten Daten aus der Datenbank, wenn ich dies tue und nicht zwischenspeichern?
[Hier ist ein Artikel] (http://tech.trailmax.info/2014/09/aspnet-identity-and-ioc-container-registration/), der Schritt für Schritt zeigt, wie der Service Locator entfernt wird Muster, wenn Sie Dependency Injection verwenden. Wenn Sie DI nicht verwenden, können Sie den Manager nicht an den Controller übergeben, sondern müssen ihn innerhalb des Controllers neu erstellen. – NightOwl888