我正在为 WinForms 应用程序开发基于 MVP 的 GUI 架构,并希望使用 Autofac 来跟踪不同的部分。我不断遇到循环组件依赖关系,并希望能在正确的方向上轻轻推动。
该架构基于这篇文章,其中视图就像我得到的一样被动。View 没有对 Presenter 的引用。视图在构建时传递给演示者。因此,在非 DI 世界中,您将开始您的程序:
var MainView = new MainView();
var mainPresenter = new MainPresenter(mainView, new DataRepository());
Application.Run(mainView);
好的,因此 Presenter 需要了解 View 实例才能完成其工作。我如何在注册码中表达这一点?这是我尝试过的:
builder.RegisterType<MainPresenter>().PropertiesAutowired().SingleInstance();
builder.RegisterType<MainView>().As<IMainView>().PropertiesAutowired().SingleInstance();
然后在 Program.cs 中:
var mainPresenter = Container.Resolve<MainPresenter>();
Application.Run(Container.Resolve<IMainView>() as MainView);
但是这样我需要记住创建 Presenter 实例。但是,我想在注册中表示,如果我请求 IMainView 实例,则应该启动 MainPresenter。但是怎么……
欢迎任何暗示、嘲讽或嘲弄的笑声