Tôi đang đối mặt với một vấn đề phụ thuộc cyclic khi tạo thiết kế MVP sau đây (cho winforms) bằng cách sử dụng container windsor.Vấn đề tham chiếu tuần hoàn trong mẫu MVP bằng cách sử dụng Windsor castle cho Dependency injection
người dẫn chương trình của tôi phụ thuộc vào quan điểm và mô hình:
ConcretePresenter(IView view, IModel model)
{
this.view = view;
this.model = model;
}
Quan điểm của tôi phụ thuộc vào người dẫn chương trình:
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;
}
Tôi đăng ký tất cả các thành phần sử dụng Windsor lâu đài (trong một lớp thành phần gốc riêng biệt) như sau:
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>());
Giải quyết chế độ xem sẽ trả về vấn đề tái chế theo chu kỳ vấn đề về ference:
container.Resolve<ConcreteView>(); //doesn't resolve because of cyclic dependency
Một giải pháp có thể là loại bỏ việc xây dựng phun khỏi chế độ xem và giải quyết riêng người trình bày. Nhưng điều này khiến tôi sử dụng vùng chứa ở hai nơi mà tôi không muốn làm và có thể là sai.
ConcreteView()
{
container.Resolve<ConcretePresenter>(); //resolving at 2 different points
}
Có giải pháp nào tốt hơn cho điều này không. Tôi có làm gì sai trong MVP không?
có thể trùng lặp: http://stackoverflow.com/questions/1783124/castle-ioc-resolving-circular-references – Roubachof