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