什么框架使用`IServiceProvider`

本文关键字:IServiceProvider 框架 什么 | 更新日期: 2023-09-27 17:57:28

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

什么框架使用`IServiceProvider`

IServiceProvider是一个导入的(或可能保留的)COM接口,用于查询服务的对象上下文中的私有功能。术语"服务"在这里的应用相当松散,它最初指的是可以根据给定的GUID返回的任何COM对象。

IServiceProvider@MSDN(.NET参考)
MSDN上的IServiceProviderImpl类(C++ATL引用)

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

IServiceProvider的一个很好的历史上下文是IE浏览器插件规范。在这里,它用于允许插件组件在上下文中使用浏览器主机功能。在COM上下文中,这个接口很有用,因为它隐藏了实例化的细节,也可以用作对象构造和使用策略的一部分,以避免引用循环。

WebBrowser自定义(第2部分)@MSDN

我认为它是一个非常通用的接口,所以您可以将它与任何东西一起使用。它几乎不应该出现在Framework类库中。对于一个特定的用途,WCF数据服务团队的Alex D.James有一个关于它的博客

http://blogs.msdn.com/b/alexj/archive/2010/01/07/creating-a-data-service-provider-part-2-iserviceprovider-datasources.aspx

我认为这与IoC容器无关。我经常使用Unity和Autofac,从来没有见过它与它们一起使用。至于滚动自己的,我建议您用更标准的通用方式定义自己的容器接口:

public interface IContainer
{
    T Resolve<T>();
}

这是非常标准的,有一些变化,但如果符合您的需求,您也可以使用IServiceProvider。

注意,除非这只是一个学术练习,否则你可能想读"依赖注入"。Mark Seemann涵盖了每一个容器以及相当多的理论和实践。也就是说,我强烈推荐它。

https://www.amazon.com/Dependency-Injection-NET-Mark-Seemann/

ASP.NET 5在"自托管"模式下使用IServiceProvider,即在控制台应用程序或服务中托管ASP.NET应用程序和运行时
(实现IServiceProviderMicrosoft.Framework.Runtime.Common.DependencyInjection.ServiceProvider类型的对象被传递给控制台应用程序构造函数。)

因此,如果您想在ASP.NET 5中使用不同的IoC容器,则可能需要实现此接口。或者将另一个IoC容器封装在实现该接口的类中。

新的(从.NET 4开始)运行时缓存API也使用它:http://msdn.microsoft.com/en-us/library/system.runtime.caching.objectcache.host.aspx.

同时也是Visual Studio的设计师。

相关文章:
  • 没有找到相关文章