无法new

内部类无法直接创建

 通过构建器创建

IServiceProvider serviceProvider = new ServiceCollection().BuildServiceProvider();

通过ServiceProvider获取自身

static void Main(string[] args)
{
    IServiceProvider serviceProvider = new ServiceCollection().BuildServiceProvider();
    Debug.Assert(object.ReferenceEquals(serviceProvider, serviceProvider.GetService<IServiceProvider>()));
    Debug.Assert(object.ReferenceEquals(serviceProvider, serviceProvider.GetServices<IServiceProvider>().Single()));
}

 通过ServiceScope创建

创建一个独立的ServiceProvider并调用其GetService<T>方法获得一个ServiceScopeFactory对象,然后调用其CreateScope方法创建一个新的ServiceScope。同时也就创建了一个ServiceProvider

static void Main(string[] args)
{
   IServiceProvider serviceProvider1 = new ServiceCollection().BuildServiceProvider();
   IServiceProvider serviceProvider2 = serviceProvider1.GetService<IServiceScopeFactory>().CreateScope().ServiceProvider;
   object root = serviceProvider2.GetType().GetField("_root", BindingFlags.Instance| BindingFlags.NonPublic).GetValue(serviceProvider2);
   Debug.Assert(object.ReferenceEquals(serviceProvider1, root));        
}