分离接口和实现

时间:2010-04-12 16:28:26

标签: c# inversion-of-control

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

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

在程序集“C”中,我们可以使用IoC容器使用“B”中的对象依赖注入来创建“A”对象。 这样'B'和'C'完全没有意识到(不依赖)他们自己..

1 个答案:

答案 0 :(得分: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接口。通过在需要时切换具体实例,IOC容器仍然可以利用“即插即用”。

<强>更新

根据您的评论,您似乎担心将IOC容器绑定到na程序集。这不是问题,并且不要求将容器分离到单独的组件。如果有的话,我会把它当成代码气味,更不用说无意义的行为。