我最近加入了一个有很多现有代码的团队。在过去的几年里,这段代码是由许多不同的人编写的。
扩展方法已从IServiceCollection
创建,以便更轻松地注册依赖项。当我深入研究一些代码的内部工作原理时,我看到以下内容是在两种不同的扩展方法中完成的。
分机 1
public void AddServices1(this IServiceCollection services)
{
services.AddScoped<IService, Service>();
}
分机 2
public void AddServices2(this IServiceCollection services)
{
services.AddTransient<IService, Service>();
}
在Startup.cs
文件中存在以下内容
public void ConfigureServices(IServiceCollection services)
{
...
services.AddServices1();
...
...
services.AddServices2();
...
}
我想了解将服务注册为两个不同生存期的影响是什么?
我做了很多谷歌搜索,但我找不到任何人谈论当服务注册两次但具有不同生命周期时会发生什么。红隼 DI 如何确定解析此服务时使用的生存期类型。
我最好的猜测是它基本上使用最后一个注册的 - 第一个被扔掉,但我不确定这是否 100% 正确。
有谁知道它的确切工作原理?
你是对的,当你使用serviceProvider.GetService<IService>();
时,你会得到最新的注册服务,但请记住,你也可以通过serviceProvider.GetService<IEnumerable<IService>>();
获得它们,在这种情况下,每个人都有自己的生活方式。