ASP.NET MVC Core DI注入服务列表

Ant*_*ton 15 c# asp.net-core-mvc

如何获得这样的新DI支持注入?

  public class Thing{

    public Thing(IList<IService> someServices) {

       ...
    }
  }

  public class ServiceA : IService { }
  public class ServiceB : IService { }
  public class ServiceB : IService { }

  public class Startup {
    ...

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddTransient<IService, ServiceA>()
                .AddTransient<IService, ServiceB>()
                .AddTransient<IService, ServiceC>();
    }
  }
Run Code Online (Sandbox Code Playgroud)

Gab*_*nha 16

从ASP.NET Core 2.0开始,如果您注入依赖项IEnumerable<IService>而不是注入依赖项IList<IService>,则可以放弃注册列表本身,只留下单独的服务注册.


Ant*_*ton 7

懂了(简体)

.AddTransient(p => p.GetServices<IService>())
Run Code Online (Sandbox Code Playgroud)

但是您必须完全符合ctor的期望

.AddTransient<IList<IService>>(p => p.GetServices<IService>().ToList())
Run Code Online (Sandbox Code Playgroud)