मैं सोच रहा हूं कि DI का उपयोग करके किसी ऑब्जेक्ट को कैसे प्रबंधित किया जाए। मान लीजिए मैं एक वर्गप्रबंधनीय डिस्पोजेबल कक्षाएं निर्भरता इंजेक्शन
class Foo : IFoo, IDisposable
{
// ...
}
तो इस वर्ग एक और वर्ग में इंजेक्ट किया जाता है
class Bar
{
public Bar(IFoo foo)
{
this.Foo = foo
}
IFoo Foo { get; set; }
}
तो मैं कुछ दायरे में इस बाँध (मेरे उदाहरण MVC और Ninject का उपयोग करता है)
this.Bind<IFoo>().To<Foo>().InRequestScope();
मैं मैं सोच रहा हूं, क्योंकि निर्भरता इंजेक्शन फ्रेमवर्क Foo
के जीवन चक्र को संभालता है, क्या मुझे Bar
में IDISpoable लागू करना चाहिए? मेरा विचार यह है कि डी Foo
के जीवन चक्र का प्रबंधन कर रहा है, इसलिए अगर कोई अन्य वर्ग Foo
का उपयोग कर रहा है तो इसे स्पर्श न करें। इसके अतिरिक्त, क्योंकि डिस्पोजेबल वस्तु एक निर्माता पैरामीटर के रूप में Bar
में पारित हो जाता, Bar
नहीं रैप एक डिस्पोजेबल वस्तु करता है, तो यह पता नहीं है कि कैसे Bar
के फोन करने वाले Foo
Bar
के बाद कचरा एकत्र किया जाता है का उपयोग करना चाहता है। क्या यह सही है?
निकोलस ब्लूमहार्ट के पास इस विषय पर ऑटोफैक्ट का उपयोग करके एक उदाहरण के रूप में एक महान पोस्ट है, लेकिन सामान्य रूप से लागू है http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/ – fsimonazzi
कुछ एमएसडीएन लेखों को देखते हुए, यह ऐसा लगता है कि माइक्रोसॉफ्ट दोनों ही करेगा: http://msdn.microsoft.com/en-us/library/yhfzs7at%28v=vs.110%29 (StremReader) "StreamReader ऑब्जेक्ट स्ट्रीम स्ट्रीमर पर प्रदत्त स्ट्रीम ऑब्जेक्ट पर निपटान() को कॉल करता है .इस्हें " " कहा जाता है लेकिन http://msdn.microsoft.com/en-us/library/z7ha67kw%28v=vs.110%29 (बिटमैप) "आपको बिटमैप के जीवनकाल के लिए स्ट्रीम को खोलना होगा। " – Michael