1

在我的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???
   }
}
4

0 回答 0