Einheit, RegisterType<> und Singleton-Objekte
Ich bin mit Unity zu instanziieren Objekte und ich finde, dass egal was ich versuche, Einheit ist das erstellen von singletons für meine Objekte.
Laut Dokumentation:
http://msdn.microsoft.com/en-us/library/dd203242.aspx#Y500
Mit dem folgenden code sollte ich immer mit einer anderen Instanz jedes mal, wenn das interface wird aufgelöst.
IUnityContainer myContainer = new UnityContainer();
//Register a default (un-named) type mapping with a transient lifetime
myContainer.RegisterType<IMyObject, MyRealObject>();
//Following code will return a new instance of MyRealObject
myContainer.Resolve<IMyObject>();
Sondern ich bin immer ein singleton-Instanz.
Unten ist meine Erklärung. Global.asax
//This should get me a singleton
container.RegisterType<IRetailerService, RetailerService>(new ContainerControlledLifetimeManager(), new InjectionConstructor());
//This is the one giving me trouble.
container.RegisterType<IInStoreRetailersViewModelBuilder, InStoreRetailersViewModelBuilder>(new InjectionConstructor(container.Resolve<IRetailerService>()));
container.RegisterType<CollectController>(new InjectionConstructor(container.Resolve<IInStoreRetailersViewModelBuilder>()));
Controller
private readonly IInStoreRetailersViewModelBuilder _inStoreRetailersViewModelBuilder;
public CollectController(IInStoreRetailersViewModelBuilder inStoreRetailersViewModelBuilder)
{
this._inStoreRetailersViewModelBuilder = inStoreRetailersViewModelBuilder;
}
public ActionResult Index()
{
InStoreViewModel viewModel = this._inStoreRetailersViewModelBuilder.WithRetailers().WithPostcode().Build();
}
Wenn ich öffnen Chrome und führen Sie den Index-Aktion, und dann gehe ich und öffne den internet explorer und rufen Sie die Index-Aktion, auf den zweiten Aufruf in den Konstruktor der inStoreRetailersViewModelBuilder parameter, wird injiziert, ist die eine erzeugt, die auf den ersten Aufruf (mit Chrome).
Ich habe versucht, mit der PerResolveLifetimeManager() und auch die PerHttpRequestLifetime() aus diesem thread: MVC, EF - DataContext singleton-Instanz Pro Web-Anfrage, in der Einheit
Aber es scheint nichts zu geben, mir eine brand neue Instanz. Jemand kann etwas Licht auf, was ich vielleicht falsch hier?
InformationsquelleAutor Yag | 2011-08-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, diese und sehen, ob es hilft.
Vielleicht durch die Lösung der parameter für den Konstruktor selbst Sie sind im wesentlichen vorbei, die in einer bestimmten Instanz, die Ergebnisse in es ein singleton.
Ich DENKE, der Unterschied ist, dass durch die Verwendung von Container.Lösen Sie auf der Durchreise sind, in ein vorhandenes Objekt an den Konstruktor so wird es immer vorhandenes Objekt. Wenn Sie ResolvedParameter Einheit aufgelöst wird, ein neues Objekt jedes mal und pass es an den Konstruktor. Haben Sie einen Blick auf die Unterlagen, die Sie verlinkt, ich denke, das erste Beispiel in der Verwendung eines Lifetime-Manager mit der Methode RegisterInstance Abschnitt ist äquivalent zu dem, was Sie Taten.
InformationsquelleAutor MLF