Interface IoC和管理接口

Interface IoC和管理接口,interface,ioc-container,decoupling,Interface,Ioc Container,Decoupling,假设我有一个业务对象库,它使用IoC实现一个数据访问库。我应该在哪里定义数据访问接口?它属于哪个图书馆?或者它应该只在一个单独的库中用于接口?我将在业务域中定义接口。然后,接口的实现将位于引用业务域的库中(并且由应用程序上下文引用,或者由应用程序上下文引用的IoC库引用) 然后,将一个实现与另一个实现交换只是创建另一个库并在应用程序上下文中交换引用的问题 在.NET项目结构中,它看起来像这样: 域逻辑项目 (未提及任何内容) 域模型 存储库接口 IoC服务定位器接口 存储库项目 (参考领域逻辑项

假设我有一个业务对象库,它使用IoC实现一个数据访问库。我应该在哪里定义数据访问接口?它属于哪个图书馆?或者它应该只在一个单独的库中用于接口?

我将在业务域中定义接口。然后,接口的实现将位于引用业务域的库中(并且由应用程序上下文引用,或者由应用程序上下文引用的IoC库引用)

然后,将一个实现与另一个实现交换只是创建另一个库并在应用程序上下文中交换引用的问题

在.NET项目结构中,它看起来像这样:

域逻辑项目
(未提及任何内容)
域模型
存储库接口
IoC服务定位器接口
存储库项目
(参考领域逻辑项目)
存储库实现
国际奥委会项目
(参考领域逻辑项目)
(参考存储库项目)
IoC服务定位器的实现
IoC引导
应用项目
(参考国际奥委会项目)
(参考领域逻辑项目)
(可能需要引用存储库项目,不确定)
实现与域模型交互的UI


如果两个不同的库正在使用存储库实现,会怎么样?这是否意味着两个引用,两个接口?@g.foley:除了IoC容器之外,还需要引用哪些存储库实现?所有内容都会引用域逻辑(接口)和代码。然后,任何给定的应用程序上下文都会引用域逻辑和IoC来调用引导程序将其连接起来。@g.foley:或者您的意思是有两个域逻辑项目,一个存储库项目为这两个项目实现存储库?在这种情况下,引用两者应该不是问题。但它可能会导致任何给定的应用程序上下文都包含两个域的DLL,如果它只需要一个域的话。但是大部分逻辑应该在域中,域之间不相互引用。因此,一般来说,您应该做得很好,您只需要使用标记随附DLL即可。@g.foley:存储库实现可以引用并实现他们想要的所有接口,现在我对其进行了详细描述。事实上,没有什么能阻止您拥有一个巨大的实现类,它实现您拥有的每个域中的所有存储库接口。这有点傻,但这是允许的。关注点的抽象和分离在接口中。实现不那么重要,因为它应该是一次性的/可替换的。