我有一个称为IRule的接口以及实现此接口的多个类。我想使用.NET Core依赖项注入容器来加载IRule的所有实现,因此要加载所有已实现的规则。
不幸的是我无法完成这项工作。我知道可以将IEnumerable<IRule>
注入控制器的ctor中,但是我不知道如何在Startup.cs中注册此设置。
最佳答案
只是一个一个地注册所有IRule
实现的问题; 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>
。