2009-07-24 18 views
5

के साथ कन्स्ट्रक्टर निर्भरता इंजेक्शन मैंने कहीं पढ़ा है कि NHibernate 2.1 इसके entites के लिए कन्स्ट्रक्टर निर्भरता इंजेक्शन का समर्थन करता है।NHibernate 2.1 और स्ट्रक्चर मैप

इसे प्राप्त करने और चलाने के लिए मैं स्ट्रक्चर मैप और एनएचबीनेरेट 2.1 को कॉन्फ़िगर करने के बारे में कैसे जा सकता हूं?

+0

इसके साथ कहीं भी जाओ? मैं भी sm के साथ मेरी इकाइयों में निर्भरता इंजेक्षन करने के लिए देख रहा हूँ। –

+0

नहीं, मुझे लगता है कि मैंने समस्या को पुनर्विचार करके और निर्भरता इंजेक्शन से परहेज करके इसे हल किया :) – BjartN

उत्तर

0

अपनी सभी इकाइयों (कक्षाओं आदि) में स्ट्रक्चर मैप स्थापित करके और फिर कक्षा के निर्माता के लिए हस्ताक्षर के रूप में उनमें से प्रत्येक के लिए इंटरफ़ेस का उपयोग करके ... जब आप उस वर्ग को तुरंत चालू करते हैं जिस पर इसके निर्माता में निर्भरता है स्ट्रक्चर मैप ऑटो आपके लिए इंजेक्ट करेगा!

[PluginFamily("Default")] 
public interface IWidget1 

[Pluggable("Default")] 
public class Widget1 : IWidget1 

[PluginFamily("Default")] 
public interface IAnotherWidget 

[Pluggable("Default")] 
public class AnotherWidget : IAnotherWidget 
{ 
    public AnotherWidget(IWidget widget) 
    { 
     ... 
    } 
} 

IAnotherWidget _anotherWidget = ObjectFactory.GetInstance<IAnotherWidget>(); 

ऐसा कुछ!

यह भी काम का हो सकता है: Can I replace the call to Activator.CreateInstance() in NHibernate?

और यह: http://devlicio.us/blogs/billy_mccafferty/archive/2007/02/05/inject-di-container-into-domain-objects-with-nhibernate.aspx

2

मुझे पता है यह एक पुराने सवाल है, लेकिन मामले में यह उपयोगी हो सकता है।

संपादित करें: मूल पोस्ट किए गए लिंक एनएचआईबी 2.1 के लिए प्रभावी नहीं थे, बेहतर जानकारी मिली।

NHibernate 2.1 के लिए, आप एक इंटरसेप्टर बना सकते हैं और Instantiate विधि को ओवरराइड कर सकते हैं और अपने कंटेनर को अपने उदाहरण बना सकते हैं। Here is an example

यदि आप इसके बजाय संपत्ति इंजेक्शन करना चाहते हैं, तो आप उसी तकनीक का उपयोग कर सकते हैं लेकिन इसके बजाय ऑनलोड मोड में अपना काम करें।

संबंधित मुद्दे