Dot-Net

.NET Core 依賴注入 -> 獲取介面的所有實現

  • September 19, 2016

我有一個名為 IRule 的介面和多個實現該介面的類。我想使用 .NET Core 依賴注入容器來載入 IRule 的所有實現,所以所有實現的規則。

不幸的是,我無法完成這項工作。我知道我可以將一個注入IEnumerable<IRule>到控制器的 ctor 中,但我不知道如何在 Startup.cs 中註冊此設置

只需一個一個註冊所有IRule實現即可;Microsoft.Extensions.DependencyInjection (MS.DI) 庫可以將其解析為IEnumerable<T>. 例如:

services.AddTransient<IRule, Rule1>();
services.AddTransient<IRule, Rule2>();
services.AddTransient<IRule, Rule3>();
services.AddTransient<IRule, Rule4>();

消費者:

public sealed class Consumer
{
   private readonly IEnumerable<IRule> rules;

   public Consumer(IEnumerable<IRule> rules)
   {
       this.rules = rules;
   }
}

注意:MS.DI 支持的唯一集合類型是IEnumerable<T>.

引用自:https://stackoverflow.com/questions/39567609