簡體   English   中英

在ASP.NET Core中,有沒有辦法從Program.cs設置中間件?

[英]in ASP.NET Core, is there any way to set up middleware from Program.cs?

我正在為ASP.NET Core網站構建一個支持庫。 我有一些需要啟用的中間件,需要在任何其他中間件之前添加它們,因為它們的功能。

我可以在IWebHostBuilder上創建一個擴展方法來添加服務,同樣用於配置日志記錄,但我沒有看到以編程方式添加中間件的任何方法。 有沒有辦法做到這一點? 查看WebHost / WebHostBuilder的源代碼沒有跳出來。


鑒於第一個評論,我可能不夠清楚。 我知道如何創建中間件並使用它。 我想要做的是確保在框架啟動時調用Configure(IApplicationBuilder應用程序)方法時,我的中間件已經到位。 以類似的方式在啟動之前能夠進行ServiceConfiguration甚至創建。 所以像一個擴展方法

public static IWebHostBuilder AddPayscaleHostingServices(this IWebHostBuilder webHostBuilder, string serviceName)
{
    return webHostBuilder.ConfigureServices(collection =>
    {
        collection.RegisterPayscaleHostingServices();
    }).ConfigureLogging(factory =>
    {

    });
}

讓我能夠在webHostBuilder.Build方法之前進行一些設置,但是在IApplicationBuilder上我沒有看到任何類似的中間件/任何東西。

謝謝,埃里克

您可以使用啟動過濾器來實現此目的。 啟動過濾器允許您從DI容器中解析的服務配置中間件。

定義啟動過濾器很簡單:

public class MyStartupFilter : IStartupFilter
{
    public Action<IApplicationBuilder> Configure(Action<IApplicationBuilder> next)
    {
        return app =>
        {
            // Configure middleware
            // ...

            // Call the next configure method
            next(app);
        };
    }
}

始終確保調用next(app)配置任何其他中間件。

現在在ConfigureServices方法中將啟動過濾器注冊為IStartupFilter的單例實現:

services.AddSingleton<IStartupFilter, MyStartupFilter>();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM