public class StatisticsViewPresenter
{
private IStatisticsView view;
private Statistics statsModel;
public StatisticsViewPresenter(IStatisticsView view, Statistics statsModel)
{
this.view = view;
this.statsModel = statsModel;
}
}
मैं घटनाओं का उपयोग नहीं करते (लेकिन अगर यह मेरी समस्या का समाधान कर सकते हैं के लिए तैयार हूँ), तो मेरे देखें कक्षाएं इस तरह दिखेगा:डिज़ाइनर को खुश रखते हुए उपयोगकर्ता नियंत्रण विचारों पर निर्भरता इंजेक्शन कैसे लागू करें?
public class StatisticsForm : Form, IStatisticsView
{
public StatisticsForm()
{
InitializeComponent();
}
[Inject]
public StatisticsViewPresenter Presenter
{
private get;
set;
}
}
साथ
kernel.Bind<StatisticsPresenter>().ToSelf().InSingletonScope();
kernel.Bind<IStatisticsView>().To<StatisticsForm>();
kernel.Get<IStatisticsView>();
यह बनाता है प्रपत्र, प्रस्तुतकर्ता बनाता है, फिर प्रेजेंटर प्रॉपर्टी में प्रस्तुतकर्ता को इंजेक्ट करता है। सब कुछ peachy। (उस सिंगलटन-स्कोप्ड प्रेजेंटर के अलावा - ऐसा करने के बेहतर तरीके से कोई विचार? शायद प्रस्तुतकर्ता के प्रस्तुतकर्ता के अंदर प्रस्तुतकर्ता की प्रस्तुति प्रॉपर्टी में प्रस्तुतकर्ता को मैन्युअल रूप से इंजेक्ट करें: this.view.Presenter = this)।
लेकिन अगर मैं सांख्यिकीफॉर्म नियंत्रण में सांख्यिकीफॉर्म को चालू करता हूं और इसे अपने मेनफॉर्म पर खींचता हूं, तो इसे निनजेक्ट द्वारा मेनफॉर्म में इंजेक्शन नहीं दिया जा रहा है, यह केवल डिजाइनर द्वारा नया किया जा रहा है। मैं यहां तीन समाधान देखता हूं:
1) UserControls का उपयोग न करें और केवल एक विशाल रूप का उपयोग करें जो इन एकाधिक विचारों को लागू करता है (eww);
2) मेरे फॉर्म में UserControls इंजेक्ट करें और डिज़ाइनर समर्थन खो दें;
3) आपका समाधान! :)
अंतिम समाधान क्या था? मैं डिजाइनर में UserControls का उपयोग करने और निर्भरता इंजेक्शन का उपयोग करने का एक तरीका भी ढूंढ रहा हूं। – Nathan
कृपया हमें बताएं कि क्या आपको एक व्यवहार्य समाधान मिला है। धन्यवाद! –
असल में, मैंने डिजाइनर का उपयोग फॉर्म पर उपयोगकर्ता नियंत्रण खींचने के लिए किया था और इन नियंत्रणों को फ़ॉर्म के गुणों के रूप में उजागर किया था। फिर मेरे आवेदन प्रविष्टि बिंदु के पास मैं इन गुणों के मूल्य को देखने के लिए बाध्य करता हूं। फिर जब कंटेनर (मैं अब ऑटोफैक का उपयोग करता हूं) को दृश्य प्रकार (दृश्य के प्रस्तुतकर्ता के लिए) की एक वस्तु की आवश्यकता होती है, तो यह केवल फ़ॉर्म की संपत्ति का मान लोड करती है। साइड नोट: मैं घटनाओं का भी उपयोग करता हूं और प्रस्तुतकर्ता को दृश्य की अनावश्यक युग्मन को खत्म करने के लिए प्रस्तुतकर्ता को अब दृश्य में प्रकट नहीं करता हूं। दृश्य को यह नहीं पता होना चाहिए कि एक प्रस्तुतकर्ता है। –