问题 使用Smart Client Winform应用程序的IoC / DI框架:我该如何处理?


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

似乎几乎每个使用IoC / DI的人都是在基于Web的环境中这样做,并且几乎没有发现使用Winforms的任何内容。

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

如果有人知道任何使用IoC / DI的基于Winforms的开源项目(无论哪个框架,我应该能够翻译概念)我也希望链接到那些。

编辑:

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

编辑:

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

编辑:

我一直在使用Ninject,并发现如果你指定一个IKernel构造函数参数,Ninject会很乐意为它注入一个公共内核接口的实例。这已经很好了,但我仍然希望听到人们使用的其他方法。


5985
2018-03-28 22:48


起源

jikes我有很多东西可以学习.net。我甚至不明白这个问题。 - Nifle
实际上,这些概念在Java中得到了普及。它本身并不与.NET相关,我只是在.NET中使用这些技术 - Erik Funkenbusch
您是否找到了有关如何通过应用程序访问容器的最佳实践?或者这是最后一次编辑的内容?这是否意味着我可以只提供需要它的课程 IKernel 参数和Ninject完成剩下的工作(即使是在另一个子项目中)? - InvisiblePanda


答案:


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

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

根据我的经验,在各方面都值得付出努力,我绝不想在不使用这些工具和高度结构化的模块化方法的情况下编写WinForms应用程序。


5
2018-03-29 17:02



您能否举例说明您认为IoC / DI取胜的地方?我刚刚进入这个阶段,所以我不完全明白你的意思。 - Erik Funkenbusch
好的,我们的应用程序在各处都使用IoC,MVP,DDD,TDD和流畅的界面。虽然它已经变成了一个非常复杂的野兽,但我对它的质量非常有信心。使用IoC,我们可以提取应用程序的每一部分并单独测试它。我们已经设置了TeamCity来对每次提交运行测试。 - grover
使用IoC,我们可以通过切换服务实现轻松地响应客户需求。示例:我们按需切换DDD存储库,我们通过切换演示者来更改UI行为。没有更多'如果应用程序在模式x然后做其他z'废话。甚至连接不同的UI行为也有帮助。 - grover


微软模式和实践团队维护着 统一 注射容器也创造了 智能客户端 - 复合UI应用程序块 对于winforms,我相信使用Unity。我知道新的WPF版本叫做 复合客户端应用指南(代号Prism) 使用Unity


6
2018-03-28 23:51



我真的没有看到关于Unity的任何事情......我会深入挖掘一下,但我认为CUIAB早于Unity。 - Erik Funkenbusch


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

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


1
2018-06-06 10:09





如果您只想要一个Inversion of Control容器,并希望获得比Unity更低的级别,请查看 ObjectBuilder的来自Microsoft Patterns and Practices组。 Unity是ObjectBuilder之上的抽象层。


0
2017-09-24 22:54