如何在我的情况下使用/配置Unity容器IOC

时间:2010-01-14 00:43:39

标签: .net dependency-injection ioc-container

我在从配置文件读取项目时将Unity IOC实现了一些麻烦。

这就是我所拥有的

1)ClasslibraryA

2)引用ClasslibraryA的ClasslibraryB

3)Winforms App引用ClasslibraryB

注意:SomeOther应用程序将引用ClassLibraryA,例如。一个网络服务。

必须根据IOC的使用位置为IOC配置ClasslibraryA。 例如。如果在Web服务中调用IDataSource并从本地应用程序调用它,它将会有所不同。

ClasslibraryB也有自己的一组依赖项,也可以由主应用程序注入,在本例中是winforms应用程序。 ClasslibraryB将在循环中实例化许多ClasslibraryA对象。

Winforms app将包含ClassLibraryB的dependancies实现的具体实现,而Container.Configure应该在这里调用?

我的问题是,

何时何地调用应用程序中的Container.Configure?
我是否需要所有子库层/层的子容器?
classlibraryB或winforms应该将ClasslibraryA的具体类实现注入classlibraryA吗? 我应该将每个图层/层的IOC配置分组到配置文件中的不同“容器”名称吗?

2 个答案:

答案 0 :(得分:3)

每个应用程序都拥有一个单独的容器,并负责配置该容器实例。配置和解析调用应尽可能接近应用程序的入口点。这称为组合根

您的Windows窗体应用程序应在其引导代码中拥有,配置和解析容器。可能还有其他应用程序也使用ClassLibraryA与它完全无关。

Web Service应该拥有另一个容器并对其进行配置以满足其需求。它对Windows Forms应用程序一无所知。

以下是有关撰写根的更多信息:

所有库都应该完全与DI容器无关,以便您可以使用任何容器(以及任何容器实例)连接所有依赖项。

请点击此处了解更多详情:

正如您可能已经注意到的,这些是一般原则并且适用于整体DI - 不仅仅适用于Unity。

答案 1 :(得分:0)

你应该在应用程序的最开始调用Container.Configure,但是ClassLibraryA应该手动接收依赖项,可能有被调用的WebMethod实例化(或询问ioc实例)右类型