c# - 为什么 IDependencyResolver 与 System.Web 紧密耦合?

标签 c# asp.net .net asp.net-mvc asp.net-web-api

为什么 IDependencyResolverSystem.Web 程序集(MvcHttp ) 在 .NET 框架中?

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

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

最佳答案

The goal of a DI system isn't that it should provide an agnostic way of serving dependencies to a customer ?

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

它并没有真正被其他库独立重用,这很明显,MVC 都有两个版本。和 Web API .尽管它们具有相同的名称和相同的用途,但它们的实现略有不同。

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

What if I want to use IDependencyResolver in a project that should not reference anything related to System.Web ?

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

关于c# - 为什么 IDependencyResolver 与 System.Web 紧密耦合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45080456/

相关文章:

c# - 快速返回所有小于或可被七整除的数字

O(1) 中的 C# IEnumerable.toArray()

c# - ASP.NET 应用程序部署要求

c# - ASP.Net MVC Controller 注入(inject)

.net - 从托管应用程序调用的 native DLL 的堆栈溢出

.net HttpWebRequest url 参数中的 URL 编码

c# - WCF 服务 - 请求超出限制

asp.net - 找不到类型或命名空间名称 'ApiVersionDescription'(是否缺少 using 指令或程序集引用?)

mysql - 连接到 Azure 应用服务中的应用内 MySQL 时出现套接字错误

c# - 程序集版本匹配是如何工作的?