在ASP.NET Core中,有没有办法从Program.cs设置中间件?

时间:2017-04-25 06:49:20

标签: c# asp.net asp.net-core

我正在为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上的中间件/任何东西。

谢谢, 埃里克

1 个答案:

答案 0 :(得分:5)

您可以使用启动过滤器来实现此目的。启动过滤器允许您从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)或任何其他中间件不会进行配置。

现在在IStartupFilter方法中将启动过滤器注册为ConfigureServices的单例实现:

services.AddSingleton<IStartupFilter, MyStartupFilter>();