मैं एक WinForms अनुप्रयोग के साथ Ninject बाहर कोशिश कर रहा हूँ (मूल रूप से एक स्केच, मैं इसे उपयोग कर रहा हूँ प्रकार का काटा तरह, लेकिन इतना कठोर या विशिष्ट कुछ भी नहीं) .net 4.Winforms के लिए निदान - क्या मेरी वास्तुकला यह बेकार है?
में मुख्य रूप बनाने के लिए, मैं कुछ ऐसा कर रहा हूं:
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
[...]
IKernel kernel = BuildKernel();
Application.Run(kernel.Get<frmMain>());
}
static IKernel BuildKernel()
{
var modules = new INinjectModule[]
{
[..modules]
};
return new StandardKernel(modules);
}
}
ठीक है। यह एक मुख्य रूप बनाता है और इंजेक्शन कन्स्ट्रक्टर को उपयुक्त इंटरफ़ेस कार्यान्वयन को पारित करके, इसे अच्छी तरह से प्रदर्शित करता है।
अब क्या? मेरा आवेदन एक एमडीआई है और एप्लिकेशन मॉडल में हेरफेर करने के लिए कई बाल खिड़कियां होंगी। मेरे पास कर्नेल का कोई संदर्भ नहीं है, तो मुझे इन फॉर्मों को Get()
कैसे माना जा सकता है? स्पष्ट जवाब है 'कर्नेल को फॉर्म में पास करें' मुझे लगता है, लेकिन यह एक बहुत ही गन्दा रणनीति है और मुझे यकीन है कि डीआई के दर्शन में फिट नहीं है।
मैं यहां बताउंगा कि निनजेक्ट 2 के लिए प्रलेखन बेकार है। सबकुछ जो मैं पा सकता हूं वह मूल उदाहरण दोहराता है, वास्तव में यह बताते हुए कि निनजेक्ट का उपयोग करने से डीआई कुछ आसान बनाता है। दिए गए उदाहरण का मानक कोडिंग की समस्या बनाने और मॉड्यूल और बाइंडिंग को सार्थक बनाने के लिए पर्याप्त जटिल नहीं है।
# 1 संपादित करें:
लिंक कृपया सैम धारक द्वारा प्रदान की अध्ययन करने के बाद, मैं 'रचना जड़' दृष्टिकोण बाहर कोशिश कर रहा हूँ। मेरे वास्तुकला अब निर्माता अर्थ विज्ञान इस प्रकार के साथ सभी रूपों एक CompositedForm
से यह प्राप्त करने के लिए उपयोग करता बलों:
[Inject]
public CompositingForm(ICompositionRoot CompositionRoot)
{
InitializeComponent();
this.CompositionRoot = CompositionRoot;
}
public readonly ICompositionRoot CompositionRoot;
public CompositingForm() : this(new DummyCompositionRoot()) { }
दूसरे निर्माता फार्म डिजाइनर के लाभ है, जो मूर्ख है और फार्म मार्कअप जब तक नहीं समझ सकता है के लिए आप एक खाली कन्स्ट्रक्टर प्रदान करते हैं। अब, IKernel.Get<AForm>()
का उपयोग करके बनाए गए हर फॉर्म में एक रचना रूट जड़ होगी (चाहिए)।
इसलिए, जैसा कि मैं धीमी शिक्षार्थी हूं - अब प्रश्न वास्तव में 'इस रचना रूट में क्या जाना चाहिए'?
धन्यवाद, मैं अब उस पोस्ट से कुछ लिंक-क्रॉइंग कर रहा हूं। शायद मैं पूरे व्यवसाय को थोड़ा बेहतर कर दूंगा। –