Konfigurieren Sie Unity DI für die ASP.NET-Identität
Ich bin mit Unity erfolgreich für alle regulären constructor injection wie repositories etc., aber ich kann nicht erhalten, es funktioniert mit der ASP.NET Identität-Klassen. Das setup ist:
public class AccountController : ApiController
{
private UserManager<ApplicationUser> _userManager { get; set; }
public AccountController(UserManager<ApplicationUser> userManager)
{
if (userManager == null) { throw new ArgumentNullException("userManager"); }
_userManager = userManager;
}
//...
}
mit diesen configs für die Einheit:
unity.RegisterType<AccountController>();
unity.RegisterType<UserManager<ApplicationUser>>(new HierarchicalLifetimeManager());
unity.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new HierarchicalLifetimeManager());
Ist das das gleiche wie andere Beiträge hier für Autofac, z.B. Ninject, aber es funktioniert nicht in meinem Fall. Die Fehlermeldung ist:
Ist ein Fehler aufgetreten beim Versuch, einen Domänencontroller zu erstellen vom Typ "AccountController'. Stellen Sie sicher, dass der controller hat einen parameterlosen public-Konstruktor.
Das manuelle anlegen funktioniert natürlich:
public AccountController()
: this(new UserManager<ApplicationUser>(new UserStore<ApplicationUser>("Mongo")))
{
}
Was ist falsch?
UPDATE
Vorgeschlagen von @emodendroket, die Verkürzung der code dieser funktioniert der trick. Keine Notwendigkeit, für die Einheit.Mvc-Paket.
unity.RegisterType<IUserStore<IdentityUser>,
MyCustomUserStore>(new HierarchicalLifetimeManager());
und
public AccountController(UserManager<IdentityUser> _userManager,
IAccountRepository _account)
{
//...
InformationsquelleAutor der Frage Benjamin E. | 2014-02-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie auch zu lösen, die UserManager. Der folgende Code ist ein Beispiel, wie man es schaffen könnte mit dem UserManager und die RoleManager. In diesem Beispiel verwende ich die reguläre Einheit am 3 Paket anstatt eines der Derivate oder bootstrappers (hatte einige Probleme mit Ihnen in der Vergangenheit).
AccountController
Einheit Bootstrapper
InformationsquelleAutor der Antwort Horizon_Net
Als diese blog-post von enterpriseframework.com sagt:
Erste, fügen Sie die Einheit für Bootstrapper ASP.NET MVC Nuget-Paket.
In Ihrem Visual Studio "Solution Explorer" > klicken Sie rechts auf Ihrem Web-Projekt ist "Referenzen" Knoten > klicken Sie auf "NuGet-Pakete Verwalten".
"Aus dem linken Menü, wählen Sie Online - > Alle
Dann Ändern
your-Web-project/App_Start/UnityConfig.cs
Datei und aktualisieren Sie dieusing
- Anweisungen wie folgt:Schließlich, in der gleichen Datei, update
RegisterTypes
Methode wie folgt:HTH
InformationsquelleAutor der Antwort Kamran
Müssen Sie sich der Einheit unter den
HttpConfiguration.DependencyResolver
Eigenschaft. Dies ermöglichtWebApi
zu wissen, dass es braucht, der Einheit eher als Reflexion instantiieren Ihre Controller.Der einfachste Weg, dies zu tun ist mit den oben genannten nuget-Paket.
InformationsquelleAutor der Antwort Aron
Ersetzen Sie diese Eigenschaft in der
AccountController
InformationsquelleAutor der Antwort Mariano German Villarreal Kube