码迷,mamicode.com
首页 > 其他好文 > 详细

对比serviceProvider的GetService与GetServices

时间:2021-01-08 11:29:40      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:ring   play   line   esc   let   main   opened   cep   data   

演示通过ServiceProvider得到一个包含多个服务实例的集合。

  1. 定义了一个服务接口IFoobar
  2. 添加服务接口的两个实现类Foo和Bar
  3. 将Foo和Bar的ServiceDescriptor添加到ServiceCollection中
  4. 这时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

 

 

对比serviceProvider的GetService与GetServices

标签:ring   play   line   esc   let   main   opened   cep   data   

原文地址:https://www.cnblogs.com/sunpan/p/14244062.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!