【问题标题】:IoC/DI frameworks with Smart Client Winform apps: How should I approach this?带有 Smart Client Winform 应用程序的 IoC/DI 框架:我应该如何处理这个问题?
【发布时间】:2009-03-28 22:48:03
【问题描述】:

我正在启动一个新的 Winforms 应用程序,并且打算使用 IoC/DI 框架(可能是 Ninject,但我也在考虑 StructureMap 和 LinFu)。

似乎几乎每个使用 IoC/DI 的人都在基于 Web 的环境中这样做,并且几乎没有发现将 Winforms 与它一起使用。

我想知道是否有人将 IoC/DI 与 Winforms 一起使用,以及您用于处理 Winforms 相关问题的方法(例如,您如何使容器在应用程序的各个部分中可用,您使用用于实例化表单等的框架。)

如果有人知道任何使用 IoC/DI 的基于 Winforms 的开源项目(不管是哪个框架,我都应该能够翻译概念),我也想要这些链接。

编辑:

人们不再编写智能客户端了吗?

编辑:

如果您能指出一些在 Winforms 甚至控制台类型应用程序中使用 IoC/DI 的真实代码(即不基于 Web 的东西),我将不胜感激。

编辑:

我一直在使用 Ninject,发现如果您指定 IKernel 构造函数参数,Ninject 会很高兴地注入其通用内核接口的实例。这一直很有效,但我仍然想听听人们使用的其他方法。

【问题讨论】:

  • jikes 我有很多关于 .net 的知识要学习。我什至不明白这个问题。
  • 其实这些概念在Java中已经普及了。而且它本身与 .NET 无关,我只是在 .NET 中使用这些技术
  • 您是否找到了有关如何通过应用程序访问容器的最佳实践?或者这就是最后一次编辑的内容?这是否意味着我可以只给需要它的类一个 IKernel 参数,而 Ninject 会做剩下的事情(即使在另一个子项目中)?

标签: c# winforms dependency-injection inversion-of-control


【解决方案1】:

维护Unity 注入容器的Microsoft 模式和实践团队还为winforms 创建了Smart Client - Composite UI Application Block,我相信它使用Unity。我知道名为 Composite Client Application Guidance (codename Prism) 的新 WPF 版本使用 Unity

【讨论】:

  • 我没有真正看到任何关于 Unity 的信息...我会深入挖掘,但我认为 CUIAB 早于 Unity。
【解决方案2】:

我最近刚开始使用 StructureMap for IoC 从头开始​​编写一个新的 WinForms 应用程序。我之前看过 SCSF 和 CAB,但发现它们过于复杂。

我在 StructureMaps 注册表之上编写了一些流畅的 API,以便我们的模块可以注册命令、演示者和视图。

根据我的经验,所有方面的努力都是值得的,如果不再次使用这些工具和高度结构化的模块化方法,我将永远不想编写 WinForms 应用程序。

【讨论】:

  • 您能否提供一些您认为 IoC/DI 获胜的例子?我刚刚进入这个,所以我不完全明白你的意思。
  • 好的,我们的应用到处都在使用 IoC、MVP、DDD、TDD 和流利的接口。尽管它已经成为一个相当复杂的野兽,但我对它的质量非常有信心。使用 IoC,我们可以提取应用程序的每一部分并单独测试它。我们已将 TeamCity 设置为在每次提交时运行测试。
  • 使用 IoC,我们能够通过切换服务实现轻松地对客户需求做出反应。一个例子:我们按需切换 DDD 存储库,我们通过切换演示者来改变 UI 行为。不再有“如果应用程序处于模式 x 则执行 y else z”的废话。甚至连接不同的 UI 行为也有帮助。
【解决方案3】:

我编写了一个应用程序来显示来自 OpenStreetMap 矢量数据 (http://wiki.openstreetmap.org/index.php/Kosmos) 的地图。我开发了自己的简单 MVP 框架,它使用 Windsor Castle 作为 IoC 容器。有兴趣的可以下载源代码,目前是BSD授权的。

现在我正在(慢慢地)重新设计这个框架,以便能够动态生成表单(而不是使用可视化设计器)。我正在考虑引入某种流畅的界面来构建表单和控件,但我还没有为此想出一个优雅的解决方案。

【讨论】:

    【解决方案4】:

    如果您只想要一个控制反转容器并希望获得比 Unity 低一点的级别,请查看 Microsoft 模式和实践组的 ObjectBuilder。 Unity 是 ObjectBuilder 之上的一个抽象层。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多