Die Beispiele, die ich in der Unity-Dokumentation gesehen haben müssen Sie, indem new LifetimeManager()
inline die Lebensdauer Manager angeben. Also ich habe diesen Code:Teilen lebenslange Manager zwischen Typen in Unity?
container.RegisterType<ApplicationDbContext>(new PerRequestLifetimeManager());
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(new PerRequestLifetimeManager(),
new InjectionConstructor(typeof (ApplicationDbContext)));
container.RegisterType<UserManager<ApplicationUser>>(new PerRequestLifetimeManager());
Gut, aber ich frage mich, warum ich so viele Instanzen erstellen. Gibt es einen Grund warum ich es nicht so schreiben sollte?
var lifetimeManager = new PerRequestLifetimeManager();
container.RegisterType<ApplicationDbContext>(lifetimeManager);
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(lifetimeManager,
new InjectionConstructor(typeof (ApplicationDbContext)));
container.RegisterType<UserManager<ApplicationUser>>(lifetimeManager);
Es scheint offensichtlich, aber kommentarlos alle Beispiele sind in dem ehemaligen Stil durch die PDF zu lesen, so frage ich mich, ob ich nicht etwas über das Verständnis bin, wie es funktioniert.
Great! Danke vielmals. Ich fand das Lesen Ihres Buches enorm hilfreich bei der Auswahl eines DI-Containers, also nehme ich an, ich hätte es nochmal anschauen sollen. :) – Casey
Nun, so viel wie ich hasse einen akzeptierten Antwort-Tag zu widerrufen, nachdem ich es gemacht, dies führt tatsächlich sofort in Ausnahmefällen, wenn ich versuche, es zu laufen: „Die Lebensdauer Manager bereits registriert sind Lifetime-Manager können nicht wiederverwendet werden, bitte. erschaffe eine neue. " – Casey
Fair genug :) Das ist ziemlich schlechtes Design, aber nicht deine Schuld! –