下面是一个例子:
//startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IMyScopedService, MyScopedService>();
services.AddScoped<AnotherScopedService , AnotherScopedService >();
var serviceProvider = services.BuildServiceProvider();
var serviceScopeFactory = serviceProvider.GetRequiredService<IServiceScopeFactory>();
IMyScopedService scopedOne;
IMyScopedService scopedTwo;
IMyScopedService scopedThree;
IMyScopedService scopedFour;
using (var scope = serviceScopeFactory.CreateScope())
{
scopedOne = scope.ServiceProvider.GetService<IMyScopedService>();
scopedTwo = scope.ServiceProvider.GetService<IMyScopedService>();
}
using (var scope = serviceScopeFactory.CreateScope())
{
scopedThree = scope.ServiceProvider.GetService<IMyScopedService>();
}
scopedFour = serviceProvider.GetService<IMyScopedService>();
AnotherScopedService.getSomething(app.ApplicationServices);
}
//AnotherScopedService .cs
public class AnotherScopedService
{
...
public static void getSomething(IServiceProvider serviceProvider)
{
IMyScopedService scopedFive = serviceProvider.GetRequiredService<IMyScopedService>();
...
}
}
我知道scopedOne和scopedTwo实际上是同一个对象,因为它们是在同一范围内创建的,并且是与和scopedThree不同的对象。scopedOnescopedTwo
以下是我的问题:
Q1-在哪个范围下scopedFour创建的?我没有手动创建 的作用域scopedFour,那么scopedFourget 是通过ConfigureServices方法的作用域创建的吗?
Q2- 和 怎么样scopedFour,scopedFive它们是在哪个范围内创建的?
POPMUISE
相关分类