Sono di fronte a un problema di dipendenza ciclica durante la creazione del seguente progetto MVP (per winforms) utilizzando il contenitore windsor.Problema di riferimento ciclico nel pattern MVP utilizzando il castello di Windsor per l'iniezione di dipendenza
mio presentatore dipende dalla vista e modello:
ConcretePresenter(IView view, IModel model)
{
this.view = view;
this.model = model;
}
mio punto di vista dipende dal presentatore:
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;
}
sto registrando tutti i componenti con il castello di Windsor (in una classe di composizione di root separato) come di seguito:
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>());
La risoluzione della vista solleva il problema del ciclico re ferenza problema:
container.Resolve<ConcreteView>(); //doesn't resolve because of cyclic dependency
Una possibile soluzione potrebbe essere quella di rimuovere l'iniezione costruttore dal vista e risolvere il presentatore separatamente. Ma questo mi fa usare il contenitore in due posti che non stavo cercando di fare e probabilmente è sbagliato.
ConcreteView()
{
container.Resolve<ConcretePresenter>(); //resolving at 2 different points
}
Esiste una soluzione migliore a questo. Sto facendo qualcosa di sbagliato in MVP stesso?
possibile duplicato: http://stackoverflow.com/questions/1783124/castle-ioc-resolving-circular-references – Roubachof