2009-07-02 18 views
7

मैं संरचना मानचित्र के साथ अपनी परियोजना में एनसीओएमओएन एनएचआरपॉजिटरी को कॉन्फ़िगर करने की कोशिश कर रहा हूं। मैं इसे लालची कन्स्ट्रक्टर चुनने से कैसे रोकूं?संरचना मानचित्र - मैं लालची कन्स्ट्रक्टर का उपयोग नहीं करना चाहता!

public class NHRepository<TEntity> : RepositoryBase<TEntity> 
{ 

    public NHRepository() {} 


    public NHRepository(ISession session) 
    { 
     _privateSession = session; 
    } 

    ... 
} 

मेरे संरचना नक्शा विन्यास

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof(NHRepository<>)) 

चीयर्स जेक

उत्तर

8

आप निर्माता आप एक डिफ़ॉल्ट के रूप में चाहते हैं के लिए [DefaultConstructor] गुण सेट कर सकते हैं। आपके मामले में, इसे NHRepository() कन्स्ट्रक्टर पर सेट करने से स्ट्रक्चर मैप को आरंभ करने के लिए यह डिफ़ॉल्ट कन्स्ट्रक्टर बना देगा।

अद्यतन: ठीक है, StructureMap के नवीनतम संस्करण, .NET 3.5 का उपयोग करने में आप भी यह SelectConstructor विधि का उपयोग कर निर्दिष्ट कर सकते हैं:

var container = new Container(x => 
{ 
    x.SelectConstructor<NHRepository>(()=>new NHRepository()); 
}); 

अंत में, मुझे यकीन है कि आप में इसे परिभाषित करने में सक्षम हो जाएगा हूँ स्ट्रक्चर मैप की एक्सएमएल कॉन्फ़िगरेशन, लेकिन मैंने इसका उपयोग नहीं किया है। आप इस पर थोड़ी सी खोज कर सकते हैं। उपरोक्त विधि के बारे में अधिक जानकारी के लिए देखें: http://structuremap.sourceforge.net/ConstructorAndSetterInjection.htm#section3

+0

हाय रैज़ी, उत्तर के लिए उत्साहित, हालांकि NHRepository NCommon.NHibernate.dll में है जिसे मैं नहीं बदल सकता। तो क्या मुझे अपनी परियोजना में एनएचआरपॉजिटरी से सिर्फ उत्तराधिकारी होना चाहिए, और इसके बजाय इसके कन्स्ट्रक्टर पर विशेषता डालना चाहिए? – superlogical

+0

मुझे इसके बारे में हालांकि नहीं था। SelectConstructor विधि का उपयोग करने के लिए मेरा अद्यतन उत्तर देखें, लेकिन यह केवल .NET 3.5 – Razzie

+0

में संभव है इसके लिए बहुत बहुत धन्यवाद! Stackoverflow कमाल है! – superlogical

1

तो +1 रेज़ी के लिए है क्योंकि यह अगर NHRepository अपने ही विधानसभा में था काम करेगा, बजाय मैं नीचे की तरह अपने खुद के भंडार के साथ NHRepository रैप करने के लिए ..

चुनें
public class Repository<T> : NHRepository<T> 
{ 
    [DefaultConstructor] 
    public Repository() 
    { 

    } 

    public Repository(ISession session) 
    { 

    } 
} 

ForRequestedType(typeof (IRepository<>)) 
       .TheDefaultIsConcreteType(typeof (Repository<>)); 
संबंधित मुद्दे