【问题标题】:Winforms MVP with Castle Windsor - DI for subforms?Winforms MVP with Castle Windsor - DI for subforms?
【发布时间】:2010-04-15 01:48:00
【问题描述】:

我正在构建一个使用被动视图 MVP 和 Castle Windsor 作为 IoC 容器的 winforms 应用程序。我对依赖注入和 MVP 还是有点陌生​​,所以我正在寻找一些清晰的东西......

我有一个包含许多用户控件的主窗体,并且还会根据需要显示其他对话框(例如登录、选项等)。我的第一个问题是......我应该使用构造函数注入来让这些其他视图的演示者进入主视图,还是应该回到服务定位器类型的模式? (有人告诉我这是一个很大的诺诺!)还是别的什么?

第二个问题...用户控件在“完成”时需要与主窗体进行通信(该状态的定义因控件而异)。有没有标准的方法来连接这些?我在想也许只是在主演示者和子演示者之间连接事件,但我不确定这是否正确。

我会很感激任何帮助,似乎 MVP 和 IoC 在 winforms 中的组合并没有完全记录在案。

【问题讨论】:

    标签: c# winforms inversion-of-control castle-windsor mvp


    【解决方案1】:

    首先我要说我已经有一段时间没有编写 WinForms 了,所以我可能并不完全准确。

    如果您使用被动视图,您的视图应该没有依赖关系,因此您不需要向其中注入任何内容。 Presenter 应该由容器实例化,并通过 .ctor 将 IView 注入其中。通常避免使用服务定位器 - this post 描述了一些强大的替代方案。

    对于回通信,我会使用某种桥接接口,它会被注入到演示者中。我在这里含糊其辞,因为细节取决于您的场景细节,以及您决定如何划分逻辑。

    一般不要过于关注 IoC 容器 - 它只是一个可以为您完成一些(大部分)工作的工具,但它不是魔杖 - 您应该能够在没有容器的情况下做同样的事情到位,因此如果它分散了您的注意力,请在制作原型时随时将其从图片中移除。

    【讨论】:

    • 感谢 Krzysztof - 我实际上已经意识到演示者需要在彼此之间进行双向交流,所以我将在他们之间使用中介模式。关于服务定位器替代品的非常有趣的文章,我也会尝试实现它们!
    • 链接好像坏了,this是正确的文章吗?
    猜你喜欢
    • 2013-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-18
    相关资源
    最近更新 更多