簡體   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