यहाँ मैं क्या करते हैं
public interface IView<TPresenter>
{
TPresenter Presenter { get; set; }
}
public interface IPresenter<TView, TPresenter>
where TView : IView<TPresenter>
where TPresenter : IPresenter<TView, TPresenter>
{
TView View { get; set; }
}
तो इस सार प्रस्तोता वर्ग:
public abstract class AbstractPresenter<TView, TPresenter> : IPresenter<TView, TPresenter>
where TView : IView<TPresenter>
where TPresenter : class, IPresenter<TView, TPresenter>
{
protected TView view;
public TView View
{
get { return this.view; }
set
{
this.view = value;
this.view.Presenter = this as TPresenter;
}
}
}
देखने के लिए, एक संपत्ति के माध्यम से इंजेक्ट किया जाता है बजाय सेटर में द्वि-दिशात्मक स्नेह की अनुमति देने के लिए, कन्स्ट्रक्टर का। ध्यान दें कि एक सुरक्षित कलाकारों की जरूरत है ...
फिर, मेरी ठोस प्रस्तोता की तरह कुछ है:
public class MyPresenter : AbstractPresenter<IMyView, MyPresenter>
{
//...
}
कहाँ IMyView
लागू करता IView
। एक ठोस दृश्य प्रकार चाहिए मौजूद है (उदाहरण के लिए MyView
), लेकिन यह कंटेनर है कि यह हल करता है:
- मैं कंटेनर में
MyPresenter
प्रकार दर्ज खुद के रूप में, एक क्षणिक व्यवहार के साथ।
- मैं
MyView
को IMyView
के रूप में एक क्षणिक व्यवहार वाले कंटेनर में पंजीकृत करता हूं।
- मैं कंटेनर में
MyPresenter
के लिए पूछता हूं।
- कंटेनर instanciate एक MyView
- यह एक
MyPresenter
- instanciates यह
AbstractPresenter.View
संपत्ति के माध्यम से प्रस्तोता में दृश्य इंजेक्षन।
- सेटर कोड द्वि-दिशात्मक संघ
- कंटेनर रिटर्न जोड़ी प्रस्तुतकर्ता/देखें
यह आप दोनों अपने दृश्य और अपने प्रस्तोता में अन्य निर्भरता (सेवाओं, रेपोस) इंजेक्षन करने की अनुमति देता पूरा करती है। लेकिन परिदृश्य में आपने वर्णन किया है, मैं आपको सलाह देता हूं कि दृश्य के बजाय प्रस्तुतकर्ता में सेवाओं और कैश को इंजेक्ट करने की सलाह दी गई है।
स्रोत
2008-10-10 13:09:09
आप IDISposable चिंताओं को कैसे संभालेंगे? विशेष रूप से, कचरा संग्रह की अनुमति देने के लिए गोलाकार संदर्भ तोड़ना? – aboy021