2010-04-12 79 views
1

从汇编(或模块)的角度来看,您如何看待接口(1.assembly)与其实现(2.assembly)的分离?接口的分离与实现

通过这种方式,我们可以使用一些IoC容器来开发更多的解耦设计。 假设我们有一个程序集'A',它仅包含接口。 然后我们有一个引用'A'并实现这些接口的程序集'B'。它仅依赖于'A'。

在汇编'C'中,我们可以使用IoC容器来创建'A'的对象,使用依赖注入来自'B'的对象。 这样,“B”和“C”是完全不知道(不依赖)本身..

回答

1

我明白你在说什么,但对接口分离成单独的DLL的唯一原因是,如果另一个项目将要利用它们。

如果不是,并且同一个项目将使用相同的接口(但多次),则不需要将它们分开。 IOC容器可以简单地使用同一个程序集中的接口。

考虑:

Assembly 1: 
    IFoo 

Assembly 2: 
    IOC Container 
    ConcreteFooOne : IFoo 

Assembly 3: 
    IOC Container 
    ConcreteFooTwo : IFoo

注意,在这种情况下,每个组件的IOC容器将负责采取一切IFoo实例,并赋予它正确ConcreteFoo

这对接口有一个单独的程序集是有意义的。每个其他相关程序集(1和2)都可以使用IFoo接口。另一方面,如果ConcreteFooOneConcreteFooTwo这两个在同一个组件中将不需要拆分出接口IFoo。国际奥委会容器仍然可以利用“即插即用”,在需要时切换具体实例。

更新

基于您的评论你似乎是担心tieing IOC容器呐组装。这不是一个问题,并且将容器分离到单独的组件不是必需的。如果有的话,我会把它作为代码味道,更不用说毫无意义的行为。

+0

如何让一个程序集包含所有接口,然后引用此接口程序集的其他程序集(彼此独立)。 然后我们只有一种依赖:接口程序集<--->实现。部件。最后一个程序集将是一个IoC容器,它将链接实现。具有DI机制的组件。 – Bonefisher 2010-04-12 18:08:54

+0

@bonefisher - 这听起来不合适。国际奥委会容器(我不是IOC的专家,最近我已经变得非常痴迷它了)将与具体实现在同一个程序集中。我已经更新了我的答案,试图反映这一点。 – Finglas 2010-04-12 18:25:41

+0

但您不想为每个程序集初始化每个容器,只想要一个IoC容器,因此它必须“驻留”在实现之外。组件 – Bonefisher 2010-04-13 05:55:25