मैं कुछ वस्तुओं को तुरंत चालू करने के लिए एकता का उपयोग कर रहा हूं और मुझे लगता है कि इससे कोई फर्क नहीं पड़ता कि मैं क्या करता हूं, एकता मेरी वस्तुओं के लिए सिंगलेट बना रही है।यूनिटी, रजिस्टर टाइप <> और सिंगलटन ऑब्जेक्ट्स
प्रलेखन के अनुसार: http://msdn.microsoft.com/en-us/library/dd203242.aspx#Y500
निम्नलिखित कोड मैं एक अलग उदाहरण हर बार इंटरफ़ेस का समाधान हो जाता है हो रही किया जाना चाहिए के साथ।
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>();
लेकिन इसके बजाय मुझे सिंगलटन उदाहरण मिल रहा है।
नीचे मेरी घोषणा है। 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>()));
नियंत्रक
private readonly IInStoreRetailersViewModelBuilder _inStoreRetailersViewModelBuilder;
public CollectController(IInStoreRetailersViewModelBuilder inStoreRetailersViewModelBuilder)
{
this._inStoreRetailersViewModelBuilder = inStoreRetailersViewModelBuilder;
}
public ActionResult Index()
{
InStoreViewModel viewModel = this._inStoreRetailersViewModelBuilder.WithRetailers().WithPostcode().Build();
}
अगर मैं Chrome को खोलने और सूचकांक कार्रवाई चलाने के लिए, और फिर मैं जाकर खुला इंटरनेट एक्सप्लोरर और, सूचकांक कार्रवाई फोन दूसरी कॉल पर , कन्स्ट्रक्टर में inStoreRetailersViewModelBuilder पैरामीटर जो इंजेक्शन प्राप्त करता है वह पहला कॉल (क्रोम के साथ) पर जेनरेट किया जाता है।
मैं इस धागे से PerResolveLifetimeManager() और यहां तक कि PerHttpRequestLifetime() का उपयोग कर की कोशिश की है: MVC, EF - DataContext singleton instance Per-Web-Request in Unity
लेकिन कुछ भी नहीं मुझे एक नया उदाहरण देने के लिए लगता है। कोई भी इस बारे में कुछ प्रकाश डाल सकता है कि मैं यहां क्या गलत कर रहा हूं?
यह काम करता है! कंटेनर का उपयोग करने के बीच क्या अंतर है। रिसोलव और नया संकल्प पैरामीटर? मैं एकता पर एक विशेषज्ञ नहीं हूं और हालांकि अधिकांश भाग के लिए यह बहुत अच्छा काम करता है, कभी-कभी यह मेरे सिर को खरोंच कर रहा है। सहायता के लिए धन्यवाद! – Yag
मुझे लगता है कि अंतर यह है कि कंटेनर का उपयोग करके। रिसेल्व आप किसी मौजूदा ऑब्जेक्ट में कन्स्ट्रक्टर को पास कर रहे हैं, इसलिए यह हमेशा उस मौजूदा ऑब्जेक्ट का उपयोग करेगा। जब आप ResolvedParameter Unity का उपयोग करते हैं तो हर बार एक नई ऑब्जेक्ट को हल करेगा और इसे कन्स्ट्रक्टर को पास कर देगा। आपके द्वारा लिंक किए गए दस्तावेज़ों पर नज़र डालें, मुझे लगता है कि रजिस्टरइंस्टेंस विधि अनुभाग के साथ लाइफटाइम मैनेजर का उपयोग करने का पहला उदाहरण आप जो कर रहे थे उसके बराबर है। – MLF