为什么在.NET Framework中IDependencyResolver
与System.Web
程序集(Mvc
或Http
)耦合的原因是什么?
DI系统的目标不是要提供一种不可知的方式来为客户提供依赖关系吗?如果我想在不引用任何与System.Web相关的项目中使用IDependencyResolver
怎么办?
编辑:
这不是一个关于如何做的请求,而是一个哲学问题,因为我知道还有其他替代方案,例如开源DI库。
最佳答案
DI系统的目标不是要提供一种不可知的方式来为客户提供依赖关系吗?
没错,但是在这种情况下,IDependencyResolver
特定于定义它的库。正是该库的DI抽象允许一个不可知的扩展点来解决依赖项。我相信那是抽象的最初目标。
它并没有真正被其他库独立地重用,这很明显,因为MVC和Web API有两个版本。尽管它们具有相同的名称和目的,但是它们的实现略有不同。
它还演示了Mark Seemann在本文中提到的Conforming Container反模式,其中文章还提到了上述抽象,作为.NET的符合容器的已知示例。甚至我使用IServiceProvider
的首选方法也列出了该列表。
如果我想在应该使用的项目中使用IDependencyResolver
怎么办
没有引用与System.Web相关的任何内容?
我的建议是不要使用System.Web中的IDependencyResolver
。我还要补充一点,首先要特别注意遵循正确的设计模式,以确保人们了解这些概念以及应该在哪里应用或避免使用它们。