【问题标题】:Service Container or IoC for WinForms suggestions用于 WinForms 建议的服务容器或 IoC
【发布时间】:2011-04-06 12:43:24
【问题描述】:

我正在用 WinForms 编写一个应用程序,想知道是使用 IoC 还是使用容器。

我们正在编写的是一个文本编辑器,用于我们的本土 BASIC 风格语言,用于计算费用等。它类似于 Notepad++,但没有那么多功能和调试器。

我想知道我应该使用容器还是 IoC,我应该选择哪一个。作为一个 WinForms 应用程序并且必须在启动时做很多事情(加载语法引擎、UI 配置等)你认为我什至可以使用 IoC 吗?

有了一个容器,我可以把它变成一个静态类,然后只做 Container.GetInstance() 但是当一些类依赖于其他类时,我看不出如何连接 IoC。

我还有很多命令要使用命令模式,因此定义一个 ICommand 并使用 ITextCommand、IFormulaCalculationCommand、IDebugCommand 扩展特定区域。我什至如何使用 IoC 从这些命令之一中获取选项卡中的活动文档?

我现在很困惑,我很抱歉。

如果你不能清楚地回答以上问题,这里有几个简短的问题:)

  • 什么是最快最简单的容器(ServiceContainer?)
  • 您会为此 Windows 窗体项目推荐 Autofac 之类的 IoC 吗?
  • 您能否在实现 IoC 的同时仍使用命令模式来调用命令并获取正在编辑的活动文档等?

【问题讨论】:

  • 通过服务容器你可能是指服务定位器?

标签: c# winforms dependency-injection ioc-container containers


【解决方案1】:

首先,“IoC”的意思是“inversion of control”,它是一个与dependency injection高度相关的概念(不是具体的软件组件) . 容器一个软件组件)是一个依赖注入容器。因此,“IoC”和“容器”不仅是两个无法比较的实体,它们也可以说是在同一个“阵营”中。

因此,问题最好表述为“我应该为我的应用程序使用 DI 容器吗?”。

您可以选择几个 DI 容器:Microsoft Unity、Castle Windsor 和 NInject 是一些比较知名的容器(直到现在我还不知道 Autofac)。选择一个并继续它;您的情况不会有实际差异,如果需要,您总是可以相对轻松地切换到另一种情况。

此外,容器的一个主要卖点是您不需要将它们连接起来以构造具有深度依赖树的类。容器自动解析并注入依赖;仅当您需要使用传递给构造函数的特定值来进行对象构造时,您才需要提供帮助。

最后,DI 容器和命令模式或类似的东西之间没有关系。如果要获取活动文档,只需将活动文档的内容存储在变量中,只要它发生变化,并在需要时读取该变量即可。容器根本进不去。

更新:添加高度相关问题Which .NET Dependency Injection frameworks are worth looking into?的链接

【讨论】:

  • 感谢您的回答,有没有使用简单的 DI 技术编写的文本编辑器的好例子?我查看了 SharpDevelop,但它太复杂而无法拆分。
  • @SophieCrystalTaylor:我认为在任何地方都没有使用 DI 的 文本编辑器 的好例子。了解 DI 的人不需要这样的例子,而不懂 DI 的人则需要更多介绍性的例子;无需将文本编辑带入其中。决定一个容器并阅读它的教程。
猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 2018-06-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-09
  • 2010-12-18
  • 2011-04-07
  • 1970-01-01
相关资源
最近更新 更多