IServiceProvider基本上只是任何IOC容器的通用接口(interface),还是用于特定框架?我正在滚动自己的轻型IOC容器,我想知道是否应该实现它。我还应该实现其他接口(interface)吗?我对MEF或Unity都不是很感兴趣。我已经广泛使用了它们,但对于我当前的项目,它们并没有真正起作用。

最佳答案

IServiceProvider是导入的(或可能是保留的)COM接口(interface),旨在在您为服务查询的对象的上下文中用于私有(private)功能。 “服务”一词在这里使用得比较宽松,最初是指可以根据给出的GUID返回的任何COM对象。

IServiceProvider @ MSDN (.NET reference)
IServiceProviderImpl Class @ MSDN (C++ ATL reference)

在.NET中,除非有一个专门支持它的客户端,否则不需要实现它,并且在许多情况下,您不需要添加使用IServiceProvider隐含的另一种间接级别。另外,您可以设计自己的方案来共享通用对象,或者基于IoC/依赖注入(inject)实现其他使用模式,这些模式根据您的需求更加灵活或更严格。

IEt浏览器插件规范是IServiceProvider的良好历史背景。在这里,它用于允许插件组件在上下文中使用“浏览器主机”功能。在COM上下文中,此接口(interface)很有用,因为它隐藏了实例化的详细信息,并且还可以用作对象构造和使用策略的一部分,以避免引用循环。

WebBrowser Customization (Part 2) @ MSDN

关于c# - 什么框架使用 `IServiceProvider`?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14695238/

10-11 18:20