我刚刚开始进行 DI 和单元测试,遇到了一个障碍,我相信对于那些更有经验的开发人员来说,这很简单:
我有一个名为 MessageManager 的类,它接收数据并将其保存到数据库中。在同一个程序集(Visual Studio 中的项目)中,我创建了一个存储库接口(interface),其中包含访问数据库所需的所有方法。 该接口(interface)的具体实现在一个名为 DataAccess 的单独程序集中。
因此 DataAccess 需要对 MessageManager 的项目引用才能了解存储库接口(interface)。 MessageManager 需要对 DataAccess 的项目引用,以便 MessageManager 的客户端可以注入(inject)存储库接口(interface)的具体实现。 这当然是不允许的
我可以将接口(interface)移动到数据访问程序集中,但我相信存储库接口(interface)应该与使用它的客户端驻留在同一个程序集中
那我做错了什么?
最佳答案
您应该将您的界面与任一程序集分开。将接口(interface)与消费者或实现者放在一起违背了拥有接口(interface)的目的。
该接口(interface)的目的是允许您注入(inject)任何实现该接口(interface)的对象,无论它是否与您的 DataAccess 对象属于同一个程序集。另一方面,您需要允许 MessageManager 使用该接口(interface)而不需要使用任何具体实现。
将你的界面放到另一个项目中,问题就解决了。
关于oop - 依赖注入(inject)和循环引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/89959/