.Net依赖注入技术学习:添加服务的9种方式
向服务容器中添加服务有9种方式,本文以添加单例服务为例,逐一介绍。参考微软的MSDN帮助。
1、AddSingleton(IServiceCollection, Type),示例如下。其中Hello是一个类,不能是接口。
services.AddSingleton(typeof(Hello));
2、AddSingleton<TService>(IServiceCollection),和上一种方式是等价的。
services.AddSingleton<Hello>();
3、AddSingleton(IServiceCollection, Type, Type),它有两个参数,第1个是服务类型,第2个是实现类。
services.AddSingleton(typeof(IHello),typeof(Hello));
4、AddSingleton<TService,TImplementation>(IServiceCollection),效果同上,这是最常用的方式。
services.AddSingleton<IHello,Hello>();
5、AddSingleton(IServiceCollection, Type, Object),直接添加对象实例,这是单例模式所特有的,Scoped和Transient是没有的。
services.AddSingleton(typeof(IHello),new Hello());
6、AddSingleton<TService>(IServiceCollection, TService)。同上。
services.AddSingleton<IHello>(new Hello());
7、AddSingleton(IServiceCollection, Type, Func<IServiceProvider,Object>),这个是精髓,它的特殊点在于可以在添加服务时,调用其他的服务。
例子可以参考这篇博客:C# 依赖注入IServiceCollection的AddSingleton方法使用。
8、AddSingleton<TService>(IServiceCollection, Func<IServiceProvider,TService>),道理同上,这个是泛型版本。
9、AddSingleton<TService,TImplementation>(IServiceCollection, Func<IServiceProvider,TImplementation>),道理同上,这个是泛型版本,并且指定了服务类型和实现对象。