Mam do czynienia z problemem cyklicznej zależności podczas tworzenia następującego projektu MVP (dla winform) przy użyciu kontenera windsor.Cykliczne odniesienie w wzorcu MVP przy użyciu zamku Windsor dla iniekcji zależnej
Moja prezenter zależy na widoku i modelu
ConcretePresenter(IView view, IModel model)
{
this.view = view;
this.model = model;
}
Moim zdaniem zależy od prezentera:
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;
}
ja rejestracji wszystkie składniki za pomocą Zamek Windsor (w oddzielnej klasie korzenia kompozycji) poniżej:
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>());
Rozwiązanie problemu podnosi kwestię cyklicznego ponownego Ferenc problem:
container.Resolve<ConcreteView>(); //doesn't resolve because of cyclic dependency
Możliwym rozwiązaniem byłoby usunięcie zastrzyk konstruktora z widoku prezentera i rozwiązywać oddzielnie. Ale to powoduje, że używam kontenera w dwóch miejscach, czego nie chciałem i prawdopodobnie się mylę.
ConcreteView()
{
container.Resolve<ConcretePresenter>(); //resolving at 2 different points
}
Czy istnieje lepsze rozwiązanie tego problemu. Czy robię coś złego w samym MVP?
możliwy duplikat: http://stackoverflow.com/questions/1783124/castle-ioc-resolving-circular-references – Roubachof