【问题标题】:Winforms and IoC/DIWinforms 和 IoC/DI
【发布时间】:2013-02-06 12:27:56
【问题描述】:

在 Web 应用程序中,使用 IoC/DI 来获取数据库会话、DAO 等是合理的,因为调用“事件”的不是你,而是注入器。您只需要在事件函数中声明正确的参数即可。

但在 winforms 应用程序中,调用函数的只有你自己。没有适合您的“查询字符串处理程序”。


听起来真的无法改变

private void button1_Click(object sender, EventArgs e);

private void button1_Click(object sender, EventArgs e, DbSession dbSession);

“处理程序”会自动为您注入内容。


所以,问题是:在 winforms 中,我只需要实现一个包含所有“util”实例的单例或静态类,如 SessionFactory 等? 那么对于winforms中的注入,没有设计模式或最佳实践吗?

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    依赖注入有几种不同的风格

    • 构造函数注入 - 在对象创建时通过构造函数附加依赖项
    • Setter 注入 - 通过 setter 属性附加依赖项
    • 接口注入 - 这是一个奇怪的鸭子(由特定 DI 工具驱动的用法)
    • Service Locator – 使用一个众所周知的类,该类知道如何检索和创建依赖项。从技术上讲不是 DI,但这是大多数 DI/IoC 容器工具真正做的事情。

      依赖注入通过将对象的创建置于容器范围之外来解决问题(一点点紧密耦合)。

      查看 detailed explanation with examples

    【讨论】:

      【解决方案2】:

      我认为您不想将业务逻辑放在按钮单击的通用事件处理程序中。你要么想调用一个不同的对象,从事件处理程序内部处理这个,要么让该对象本身订阅按钮单击事件。

      【讨论】:

      • 那么,我将如何获得我的“不同对象”的实例?实例化按钮单击事件?依赖关系呢?这样我就会遇到同样的紧耦合问题。
      猜你喜欢
      • 2011-06-25
      • 1970-01-01
      • 2019-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多