यह क्योंकि मेरे कोड सब कुछ काम कर रहा है में एक बेवकूफ सवाल लग सकता है, लेकिन मैं अपने एकता कंटेनर _ambientContainer
के साथ एक सिंगलटन इस तरह से पंजीकृत कर लिया है:यूनिटीकॉन्टेनर। रिसोलव या सर्विस लोकेटर। गेट इंस्टेंस?
_ambientContainer.RegisterType<Application.StateContext>(new ContainerControlledLifetimeManager());
क्रम में, मैं का उपयोग अपने स्थानीय क्षेत्र का उपयोग करने से बचने के लिए :
get {
return ServiceLocator.Current.GetInstance<Application.StateContext>();
}
मेरी ऑब्जेक्ट का उदाहरण प्राप्त करने के लिए मेरी संपत्ति के अंदर। इस तरह से मैं हमेशा एक ही उदाहरण प्राप्त करता हूं (Application.StateContext
अभी भी एक सिंगलटन है) या GetInstance
नया बनाता है?
क्या स्थानीय _ambientContainer
फ़ील्ड का उपयोग करना बेहतर है?
get {
return _ambientContainer.Resolve<Application.StateContext>();
}
धन्यवाद।
क्या आपके पास एक विकल्प का सुझाव है? (प्रश्न में उदाहरण कोड के लिए विशिष्ट?) – Adam
@Adam कोड के लिए एक विकल्प? गेटटर? या 'Application.StateContext' का पंजीकरण? लेखक ने यह नहीं बताया कि वह किस प्रकार का एप्लिकेशन उपयोग करता है (asp.net/mcv, winforms, wpf, console, wcf ...) इसलिए मैं आपको यह नहीं बता सकता कि आपको पंजीकरण कोड रखना था। प्रत्येक प्रकार के ऐप में एक अलग [संरचना रूट] होता है (http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx)। सेवा लोकेटर को कॉल करने के लिए: उन राज्यों के 'स्टेटकॉन्टेक्स्ट' को एक सीटीओ पैरामीटर बनाएं, जिसकी आवश्यकता है। इससे निर्भरता स्पष्ट और अदला-बदली हो जाती है (उदाहरण के लिए परीक्षण के लिए)। –
यदि आप इसे गलत तरीके से उपयोग करते हैं तो कोई भी पैटर्न एक विरोधी पैटर्न है। सभी डी पुस्तकालय कवर के तहत सेवा स्थान का उपयोग करते हैं अन्यथा वे काम नहीं करते हैं। इंटरनेट पर जो कुछ भी आप पढ़ते हैं उस पर विश्वास न करें! – JBeckton