Asp.Net Core 进阶(三)—— 依赖注入

  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

猜你喜欢

转载自www.cnblogs.com/jesen1315/p/11074997.html