Asp.Net Core 提供了默认的依赖注入容器 IServiceCollection。
IServiceCollection container = new ServiceCollection(); container.AddTransient<ITestServiceA, TestServiceA>();//瞬时生命周期 container.AddSingleton<ITestServiceB, TestServiceB>();//单例:全容器都是一个 container.AddScoped<ITestServiceC, TestServiceC>();//请求单例:一个请求作用域是一个实例 container.AddSingleton<ITestServiceD>(new TestServiceD()); var provider = container.BuildServiceProvider(); ITestServiceA testServiceA = provider.GetService<ITestServiceA>(); ITestServiceA testServiceA2 = provider.GetService<ITestServiceA>(); Console.WriteLine(object.ReferenceEquals(testServiceA, testServiceA2));//返回false ITestServiceB testServiceB = provider.GetService<ITestServiceB>(); ITestServiceB testServiceB2 = provider.GetService<ITestServiceB>(); Console.WriteLine(object.ReferenceEquals(testServiceB, testServiceB2));//返回true ITestServiceC testServiceC1 = provider.GetService<ITestServiceC>(); ITestServiceC testServiceC2 = provider.GetService<ITestServiceC>(); Console.WriteLine(object.ReferenceEquals(testServiceC1, testServiceC2));//返回true var scope3 = provider.CreateScope(); var scope4 = provider.CreateScope(); ITestServiceC testServiceC3 = scope3.ServiceProvider.GetService<ITestServiceC>(); ITestServiceC testServiceC4 = scope4.ServiceProvider.GetService<ITestServiceC>(); Console.WriteLine(object.ReferenceEquals(testServiceC3, testServiceC4)); //返回false ITestServiceD testServiceD = provider.GetService<ITestServiceD>(); ITestServiceD testServiceD2 = provider.GetService<ITestServiceD>(); Console.WriteLine(object.ReferenceEquals(testServiceD, testServiceD2)); //返回true