c# – 依赖注入可以阻止循环依赖吗?
项目#1有一些项目#2引用的接口和类.
现在我想在Project#1中使用Project#2的实现,但vs.net抱怨循环依赖. 如果我在Project#1中使用依赖注入并绑定到Project#2中的实现(因为它遵守接口契约),这是否可行或者我仍然会在运行时获得循环依赖性错误消息? 解决方法
你可能用DI来解决这个问题,但你不应该这样做.
如果我理解正确,你会有这样的事情: + Assembly A + Assembly B | | +-- Interface IFoo +-- Class ConcreteFoo : IFoo | ^ +-- Class MyClass -->------->-------| 换句话说,你试图让MyClass引用ConcreteFoo,但你不能,因为ConcreteFoo所在的程序集B已经依赖于A中的IFoo. 这是一个设计错误.如果在程序集A中声明接口IFoo,但没有具体实现,那么程序集A中的任何其他接口/类应该只引用IFoo,而不是实现它的具体类. 有三种方法可以消除循环依赖: >使MyClass依赖于IFoo而不是ConcreteFoo.如果你能做到这一点,这可能是最好的选择.如果问题是你需要在MyClass中使用IFoo的物理实例并且不知道从哪里获取它,那么让它在构造函数中使用IFoo – 让任何使用MyClass的人都知道要使用的IFoo. + Assembly App + Assembly Interfaces + Assembly Concrete | | | | +-- Interface IFoo | | | | +-- Class MyClass | ------+-- Class ConcreteFoo | | | ^ +---- Member Foo ->--------------------->-------------------| >将MyClass移动到自己的程序集.有效地,您的依赖树看起来与上面的#2相同,但如果程序集A比B小得多,那么这将需要更少的工作量. 希望有所帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |