我正在开始一个新的Winforms应用程序,我打算使用IoC / DI框架(可能是Ninject,但我也在考虑StructureMap和LinFu)。
似乎几乎每个使用IoC / DI的人都是在基于Web的环境中这样做,并且几乎没有发现使用Winforms的任何内容。
我想知道是否有人在Winforms中使用IoC / DI以及您用来处理Winforms相关问题的方法(例如,如何在应用程序的各个部分使容器可用,您是否使用框架来实例化你的表格等。)
如果有人知道任何使用IoC / DI的基于Winforms的开源项目(无论哪个框架,我应该能够翻译概念)我也希望链接到那些。
编辑:
人们不再写智能客户了吗?
编辑:
如果你能指出一些在Winforms甚至是控制台类型的应用程序中使用IoC / DI的真实代码(即不是基于Web的东西),我会很感激。
编辑:
我一直在使用Ninject,并发现如果你指定一个IKernel构造函数参数,Ninject会很乐意为它注入一个公共内核接口的实例。这已经很好了,但我仍然希望听到人们使用的其他方法。
我刚刚开始使用StructureMap for IoC从头开始编写一个新的WinForms应用程序。我之前看过SCSF和CAB,但发现那些过于复杂。
我在StructureMaps注册表上编写了一些流畅的API,因此我们的模块可以注册命令,演示者和视图。
根据我的经验,在各方面都值得付出努力,我绝不想在不使用这些工具和高度结构化的模块化方法的情况下编写WinForms应用程序。
微软模式和实践团队维护着 统一 注射容器也创造了 智能客户端 - 复合UI应用程序块 对于winforms,我相信使用Unity。我知道新的WPF版本叫做 复合客户端应用指南(代号Prism) 使用Unity
我编写了一个用于显示OpenStreetMap矢量数据地图的应用程序(http://wiki.openstreetmap.org/index.php/Kosmos)。我开发了自己的简单MVP框架,它使用Windsor Castle作为IoC容器。如果您感兴趣,可以下载源代码,它目前是BSD许可的。
现在我(慢慢)正在重新设计这个框架,以便能够动态生成表单(而不是使用可视化设计器)。我正在想要为构建表单和控件引入一些流畅的界面,但我还没有想出一个优雅的解决方案。
如果您只想要一个Inversion of Control容器,并希望获得比Unity更低的级别,请查看 ObjectBuilder的来自Microsoft Patterns and Practices组。 Unity是ObjectBuilder之上的抽象层。