ich ApplicationUserManager
wie folgt definiert haben zu injizieren:Wie ApplicationUserManager mit Einheit
public class ApplicationUserManager : UserManager<ApplicationUser, int>
{
public ApplicationUserManager(IUserStore<ApplicationUser, int> store)
: base(store)
{
}
public override Task<IdentityResult> CreateAsync(ApplicationUser user, string password)
{
var result = base.CreateAsync(user, password);
//...
Repository.DoSomething(...); //Repository is null here
//..
}
[Dependency]
public IRepository Repository { get; set; }
}
injiziert Aus irgendeinem Grund mein Repository in nicht bekommen. Repository
ist immer null
Ich habe auch diese Zeile in meiner Einheit Konfiguration
.RegisterType<ApplicationUserManager>(new HierarchicalLifetimeManager())
Wie es injiziert machen?
UPDATE N:
Dies ist Code von meinem Controller; Wie ich UserManager
bin immer:
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
public async Task<IHttpActionResult> Register(RegisterBindingModel model)
{
var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
//calling my implemintation
IdentityResult result = await UserManager.CreateAsync(...);
}
Meine aktuelle Einheit Config
.RegisterType<IUserStore<ApplicationUser, int>, CustomUserStore>(new HierarchicalLifetimeManager())
.RegisterType<IAuthenticationManager>(new InjectionFactory(o => HttpContext.Current.GetOwinContext().Authentication))
.RegisterType<UserManager<ApplicationUser, int>, ApplicationUserManager>()
.RegisterType<DbContext, ApplicationDbContext>(new HierarchicalLifetimeManager())
.RegisterType<AccountController>(new InjectionConstructor())
.RegisterType<ApplicationDbContext>(new HierarchicalLifetimeManager())
.RegisterType<ApplicationUserManager>()
UPDATE N + 1:
Wie ich Unity.Mvc
Paket herausfinden, ist nicht WebAPI Controller zu injizieren. Ich habe diese method verwendet, um WebApi-Controller zu injizieren. Ich habe versucht, Unity.Mvc
Paket zu entfernen, aber Identity
warf Fehler. Von meinem Verständnis, weil Unity
war nicht in der Lage, einige Identity types
zu instanziieren, aber sie wurden konfiguriert und arbeitete im Falle der Einstellung Mvc
Container. Also brachte ich das Unity.Mvc
Paket zurück, um meine Identity types
zu injizieren. Ansonsten, wie ich oben erklärt habe, wirft es verschiedene Art auf Nullreferenzen, wenn Unity
Identity types
löst.
So habe ich zwei Container jetzt in meinem Projekt Unity.Mvc
Injektion DependencyResolver.SetResolver(new UnityDependencyResolver(container));
die Identity types
und benutzerdefinierte WebApi
Injektion config.DependencyResolver = new UnityResolver(container);
Behälter zu lösen benötigt, die WebApi
contorllers zu injizieren benötigt beide gleiche UnityConfig verwenden.
UPDATE 3:
Ich habe geändert dieses:
app.CreatePerOwinContext(() => DependencyResolver.Current.GetService<ApplicationUserManager>());
dazu
app.CreatePerOwinContext(() => UnityConfig.GetConfiguredContainer().Resolve<ApplicationUserManager>());
in Startup.ConfigureAuth()
und jetzt habe ich meine WebAPI Container ist voll funktionsfähig und Konstruktion alle erforderlich Identity types
so kann ich Mvc-Container deaktivieren oder sogar komplett rem Ove Unity.Mvc
Paket.
Danke an @Sam Farajpour Ghamari für das Pflegen vieler Dinge.
Wie greifen Sie auf die Objektinstanz "ApplicationUserManager" zu? –
@SamFarajpourGhamari ja Ich kann eingeben, um meine benutzerdefinierte 'CreateAsync()' Methode zu debuggen. Aber 'Repository' ist nicht injiziert und gleich 'null' – sreginogemoh
Erhalten Sie Instanz des Objekts durch Aufruf von' HttpContext.GetOwinContext(). Get() 'Methode? –