我正在使用被动 View MVP 和 CaSTLe Windsor 作为 IoC 容器构建一个 winforms 应用程序。我对依赖注入(inject)和 MVP 还是有点陌生,所以我正在寻找一些清晰度......
我有一个主窗体,其中包含许多用户控件,并且还会根据需要调出其他对话框(例如登录、选项等)。我的第一个问题是......我应该使用构造函数注入(inject)来将这些其他 View 的呈现器获取到主视图中,还是应该返回到服务定位器类型的模式? (有人告诉我这是一个大诺诺!)还是别的什么?
第二个问题...用户控件在“完成”时需要与主窗体进行通信(该状态的定义因控件而异)。有没有标准的方法来连接它们?我在想也许只是在主要主持人和 child 主持人之间连接事件,但我不确定这是否是正确的想法。
我很感激任何帮助,似乎 MVP 和 IoC 在 winforms 中的组合没有得到很好的记录。
最佳答案
首先让我说我有一段时间没有编写 WinForms,所以我可能不完全准确。
如果您使用的是被动 View ,您的 View 应该没有依赖关系,因此您不需要向它们注入(inject)任何东西。 Presenter 应该由容器实例化,并通过 .ctor 将 IView 注入(inject)其中。通常避免使用服务定位器 - this post描述了一些强大的替代方案。
为了返回通信,我会使用某种桥接接口(interface),它会被注入(inject)到演示器中。我在这里含糊其词,因为细节取决于您的场景的具体情况,以及您决定如何精确划分逻辑。
通常不要太关注 IoC 容器——它只是一个可以为你完成一些(大部分)工作的工具,但它不是魔杖——你应该能够在没有容器的情况下做同样的事情因此,如果它分散了您的注意力,请在制作原型(prototype)时随意将其从图片中移除。
关于c# - 带有 CaSTLe Windsor 的 Winforms MVP - 子窗体的 DI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2642245/