2011-03-02 5 views
13

का उपयोग करते समय शून्य को हल करने के लिए निंजा को कॉन्फ़िगर करें, मैं अपने कन्स्ट्रक्टर इंजेक्शन के साथ null को हल करने के लिए निनजेक्ट को कैसे कॉन्फ़िगर कर सकता हूं? मैं फैक्टरी विधि और InTransientScope के साथ ToMethod का उपयोग कर रहा हूं। मेरे कारखाने को null वापस करने के लिए डिज़ाइन किया गया है यदि कुछ चीजें पूरी नहीं हुई हैं। हालांकि, निनजेक एक अपवाद फेंकता है जो मुझे एक पैरामीटर रहित कन्स्ट्रक्टर का उपयोग करने के लिए मजबूर करता है, जिसे मैं टालना चाहता हूं।ToMethod

मैं इस तरह से बाध्यकारी हूँ:

Bind<IClient> 
    .ToMethod(x => someFactoryMethod()) 
    .InTransientScope(); 

someFactoryMethod()IClient या null वापस आ सकते हैं।

मैं इंजेक्शन कक्षा को अपवाद के बजाय null पास करने के लिए चाहता हूं। जब मैं TryGet का उपयोग करता हूं, तो मुझे अपने इंजेक्शन क्लास पर null मिलता है जब मैं इसे हल करने का प्रयास करता हूं।

मैं .NET 4.0 के लिए नवीनतम निनजेक्ट का उपयोग कर रहा हूं।

उत्तर

15

रोकें विशेष मामले के रूप null का उपयोग कर। इसके बजाय Null Object pattern का उपयोग करने का प्रयास करें। इस अशक्त चेकों के साथ अपने कोड बेस polute के लिए होने से रोकता है:

Bind<IClient> 
    .ToMethod(x => someFactoryMethod() ?? NullClient.Instance) 
    .InTransientScope(); 

// Null Object implementation of IClient 
public class NullClient : IClient 
{ 
    public static readonly IClient Instance = new NullClient(); 

    // Implement the members of IClient to do nothing. 
    public void ClientOperation() 
    { 
     // noop. 
    } 
} 
27

आपको उस शून्य को कॉन्फ़िगर करना होगा। मैं इस समय हाथ में कोई स्रोत कोड है, लेकिन वह ऐसा कुछ होना चाहिए:

new StandardKernel(new NinjectSettings { AllowNullInjection = true }); 
+18

क्या कोई तरीका है कि मैं इसे सिर्फ 'कॉल' पर अपने कॉल पर निर्दिष्ट कर सकता हूं? –

1

आप Optional विशेषता के साथ अपने निर्माता चिह्नित कर सकते हैं।

+13

मैं निनजेक्ट विशेषताओं के साथ अपने वर्गों को सजाना नहीं चाहता हूं। –