使用IoC容器的适当情况?

时间:2009-11-12 12:13:13

标签: c# .net dependency-injection inversion-of-control structuremap

假设我有一个通用的WCF服务和控制台应用程序项目,它不会在特定于客户端的部署中发生变化。我在通用项目中有一些由特定客户端代码实现的接口。客户端代码显然从客户端更改为客户端。我认为这适用于IoC容器。在我的常见服务项目中,我将客户端特定的dll放入bin中,并通过IoC连接依赖项。唯一的技巧是必须动态完成,因为公共服务项目无法直接引用特定的客户端项目。不过没什么大不了的。

这是否正确使用了IoC容器?

3 个答案:

答案 0 :(得分:3)

如果我理解了你的系统,也许你可以从Managed Extensibility Framework看看。

答案 1 :(得分:1)

依赖注入(DI - 你称之为IoC)与支持Add-Ins / PlugIns的方式略有不同。

DI 的目的是管理依赖关系并减少系统不同部分之间的耦合。它有点像Add-Ins,但略有不同,因为你通常只是将一个接口的一个实现替换为另一个。

另一方面,使用加载项,目的是提供相同服务的零个,一个或多个实现。

在这两种情况下,您可能希望在运行时根据配置文件,扫描文件夹或类似文件解析实现,因此存在很大程度的重叠。

更复杂的是,加载项本身可能具有依赖性,您可能希望支持它(进入DI领域)。

对于加载项方案,我将提出Konamimam的建议:MEF听起来像是符合您的要求。

答案 2 :(得分:0)

是的,这样可以正常使用。您只需要确保客户端特定的DLL带来他们自己的注册。使用StructureMap,它将在客户端特定的DLL中实现为Registry类。