相关疑难解决方法(0)

ASP.NET Core 的 DI 容器是否保证服务的顺序?

当我用同一个接口向DI容器注册多个服务然后请求一个时IEnumerable<IService>,容器是否保证注册的顺序就是集合的顺序?因为这似乎是行为,但我在文档中找不到任何关于它的信息。

示例 - 假设我们有这个接口:

public interface IStep
{
    void Execute();
}
Run Code Online (Sandbox Code Playgroud)

以及一些实现:

public class FirstStep : IStep { ... }
public class SecondStep : IStep { ... }
public class ThirdStep : IStep { ... }
...
Run Code Online (Sandbox Code Playgroud)

我们将它们注册到容器中:

services.AddTransient<IStep, FirstStep>();
services.AddTransient<IStep, SecondStep>();
services.AddTransient<IStep, ThirdStep>();
Run Code Online (Sandbox Code Playgroud)

最后请求一个集合IStep

public class Plan
{
    private readonly IEnumerable<IStep> steps;

    public Plan(IEnumerable<IStep> steps)
    {
        this.steps = steps;
    }

    public void Execute()
    {
        foreach (var step in steps)
        {
            step.Execute();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

假设步骤将根据注册顺序执行是否可以?如果不是,那么实现类似管道行为的最佳方法是什么?

c# dependency-injection .net-core asp.net-core

2
推荐指数
2
解决办法
1579
查看次数