Service Container或IoC for WinForms建议

时间:2011-04-06 12:43:25

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

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

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

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

使用容器,我可以使它成为一个静态类,只做Container.GetInstance(),但是当一些类依赖于其他类等时,我无法看到如何连接IoC。

我还有很多我想要使用COmmand Pattern的命令,因此定义一个ICommand并使用ITextCommand,IFormulaCalculationCommand,IDebugCommand扩展特定区域。我怎么会使用IoC来说明从其中一个命令获取Tab中的活动文档?

现在对我来说非常困惑,我道歉。

如果你不能干净地回答上述问题,这里有一些简短的问题:)

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

1 个答案:

答案 0 :(得分:2)

首先,“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?

的链接