Aşağıdaki MVP tasarımını oluştururken (winforms için) windsor kabı kullanarak döngüsel bağımlılık sorunu yaşıyorum.Bağımlılık enjeksiyonu için Windsor kalesini kullanan MVP düzenindeki döngüsel başvuru sorunu
Benim sunum görünümü ve modeline bağlıdır:
Bence sunucu bağlıdırConcretePresenter(IView view, IModel model)
{
this.view = view;
this.model = model;
}
:
ConcreteView(ConcretePresenter presenter)
{
//actual requirement that the presenter use the current instance of the view and a model object
//new presenter(this, new model())
this.presenter = presenter;
}
Ben (ayrı bir kompozisyon kök sınıfında) Windsor Kalesi kullanarak tüm bileşenler kayıt am aşağıdaki şekilde gösterildiği gibi:
IWindsorContainer container;
container = new WindsorContainer();
container.Register(Component.For<ConcretePresenter>().ImplementedBy<ConcretePresenter>());
container.Register(Component.For<IModel>().ImplementedBy<ConcreteModel>());
container.Register(Component.For<IView>().ImplementedBy<ConcreteView>());
Görünümün Çözümlenmesi döngüsel yeniden sorununu gündeme getirir fark olmamas sorunu:
container.Resolve<ConcreteView>(); //doesn't resolve because of cyclic dependency
Muhtemel bir çözüm görünümünden yapıcı enjeksiyon çıkarın ve ayrı sunum çözmek olacak. Ancak bu, konteynırı, yapmak istemediğim ve muhtemelen yanlış olan iki yerde kullanmama neden oluyor.
ConcreteView()
{
container.Resolve<ConcretePresenter>(); //resolving at 2 different points
}
Buna daha iyi bir çözüm var mı. MVP'nin kendisinde yanlış bir şey mi yapıyorum?
olası yinelenen: http://stackoverflow.com/questions/1783124/castle-ioc-resolving-circular-references – Roubachof