我有一个称为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>

10-06 13:27