繁体   English   中英

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

[英]Does ASP.NET Core's DI container assures order of services?

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

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

public interface IStep
{
    void Execute();
}

以及一些实现:

public class FirstStep : IStep { ... }
public class SecondStep : IStep { ... }
public class ThirdStep : IStep { ... }
...

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

services.AddTransient<IStep, FirstStep>();
services.AddTransient<IStep, SecondStep>();
services.AddTransient<IStep, ThirdStep>();

最后请求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();
        }
    }
}

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

是的,它确实。 订单以注册订单为准,有保障

是的,它们按顺序执行,阅读更多信息: https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-3.1

编辑:更具体的链接: https : //docs.microsoft.com/en-us/aspnet/core/fundamentals/startup?view= aspnetcore-3.1#extend-startup-with-startup- filters

感谢@Sai Puli

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM