为什么在.NET Framework中IDependencyResolverSystem.Web程序集(MvcHttp)耦合的原因是什么?

DI系统的目标不是要提供一种不可知的方式来为客户提供依赖关系吗?如果我想在不引用任何与System.Web相关的项目中使用IDependencyResolver怎么办?

编辑:
这不是一个关于如何做的请求,而是一个哲学问题,因为我知道还有其他替代方案,例如开源DI库。

最佳答案

DI系统的目标不是要提供一种不可知的方式来为客户提供依赖关系吗?


没错,但是在这种情况下,IDependencyResolver特定于定义它的库。正是该库的DI抽象允许一个不可知的扩展点来解决依赖项。我相信那是抽象的最初目标。

它并没有真正被其他库独立地重用,这很明显,因为MVCWeb API有两个版本。尽管它们具有相同的名称和目的,但是它们的实现略有不同。

它还演示了Mark Seemann在本文中提到的Conforming Container反模式,其中文章还提到了上述抽象,作为.NET的符合容器的已知示例。甚至我使用IServiceProvider的首选方法也列出了该列表。


  如果我想在应该使用的项目中使用IDependencyResolver怎么办
  没有引用与System.Web相关的任何内容?


我的建议是不要使用System.Web中的IDependencyResolver。我还要补充一点,首先要特别注意遵循正确的设计模式,以确保人们了解这些概念以及应该在哪里应用或避免使用它们。

10-06 10:30