在我的asp.net core工作中,我想IServiceProvider明确地注入控制器并解析服务。
已解决服务的生命周期是多少?它们是否在控制器的 OR 范围内与它完全分离?
请参阅MyController2使用的实际代码:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(); //add mvc
services.AddControllers() // add all controller
services.AddTransient<IService1, Service1>
services.AddTransient<IService2, Service2>();
services.AddTransient<IService3, Service3>();
services.AddTransient<IService4, Service4>();
...
}
// ... rest of start up class
}
[ApiController]
[Route("[controller]"]
public class MyController1 : ControllerBase
{
private readonly IService1 _srv1;
private readonly IService2 _srv2;
private readonly IService3 _srv3;
private readonly IService4 _srv4;
public MyController1(IService1 srv1, IService2 srv2, IService3 srv3, IService4 srv4)
{
_srv1 = srv1; //gets controller's scope
_srv2 = srv2; //gets controller's scope
_srv3 = srv3; //gets controller's scope
_srv4 = srv4; //gets controller's scope
}
}
[ApiController]
[Route("[controller]"]
public class MyController2 : ControllerBase
{
private readonly IService1 _srv1;
private readonly IService2 _srv2;
private readonly IService3 _srv3;
private readonly IService4 _srv4;
public MyController1(IServiceProvider provider)
{
_srv1 = provider.GetService<IService1>(); // what is the scope???
_srv2 = provider.GetService<IService2>(); // what is the scope???
_srv3 = provider.GetService<IService3>(); // what is the scope???
_srv4 = provider.GetService<IService4>(); // what is the scope???
}
}