IServiceProvider是一种常见的对服务定位的描述。
他认为,在一个容器中,对于某种服务来说是唯一的,例如不可能存在两个剪贴板服务,而且这也屏蔽了对服务位置的关心。这种设计对于工具类软件十分有效,例如各种设计器软件,但对于具有庞大且重复性很强的数据库类软件来说,他是不太适合的。
例如,订单模块中包含了Create、Read、Save和Delete方法,而客户模块同样包含了CRUD操作,最简单的办法是建立IDocumentService接口,包含了CRUD操作,但由于IServiceProvider无法为你区分你是申请订单的还是客户模块的,所以你必须从IDocumentService中派生出两个新的接口。
但是你要知道,现在的数据库软件动辄1000多个模块,这个工作量非常巨大,而且他还有致命的弱点:你无法在运行时通过模块的名称得知对应的接口。例如你的网页中想来上这样一个链接:
/Ordersheet?action=delete&&oid=12345
所以IServiceProvider的问题总结是:
- 在容器中包含很多重复的服务,不过他们作用的资源不同,操作也可能不同,IServiceProvider无法提供这个特性;
- IServiceProvider还无法检索某个资源的特定接口的支持情况。
所以,IResourceServiceProvider诞生了。
新增的resource参数帮助定位不同的资源,以便获取不同的实现。通过这样的设计,你将解决上面的问题。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构