演示通过ServiceProvider得到一个包含多个服务实例的集合。
- 定义了一个服务接口IFoobar
- 添加服务接口的两个实现类Foo和Bar
- 将Foo和Bar的ServiceDescriptor添加到ServiceCollection中
- 这时ServiceDescriptor对象的ServiceType属性均为IFoobar。
class Program { static void Main(string[] args) { IServiceCollection serviceCollection = new ServiceCollection() .AddSingleton<IFoobar, Foo>() .AddSingleton<IFoobar, Bar>(); IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider(); Console.WriteLine("serviceProvider.GetService(): {0}", serviceProvider.GetService<IFoobar>()); IEnumerable<IFoobar> services = serviceProvider.GetServices<IFoobar>(); Console.WriteLine("serviceProvider.GetServices():"); foreach (IFoobar foobar in services) { Console.WriteLine("{0}", foobar); } Console.ReadKey(); } } public interface IFoobar { } public class Foo : IFoobar { } public class Bar : IFoobar { }
该程序运行后将会在控制台上生成如下的输出结果:
- 先调用ServiceProvider的GetService<T>方法以确定针对服务接口IFoobar得到的实例。
- 再调用ServiceProvider的GetServices<T>方法获取一组针对服务接口IFoobar的服务实例。
serviceProvider.GetService(): AspnetCore02.Bar
serviceProvider.GetServices():
AspnetCore02.Foo
AspnetCore02.Bar
本文来自博客园,作者:尾牙衣子,转载请注明原文链接:https://www.cnblogs.com/sunpan/p/14244062.html