ASP.NET 5 中 WebActivator 的模拟是什么

What is an analog of WebActivator in ASP.NET 5

以前(在 asp.net 4.x 中)通常的做法是将 WebActivator class 用于寄存器 bootstrap 逻辑。
我知道现在我们有 Startup class 可以配置所有内容。但是使用 WebActivator 我有更多选择 - 可以将程序集放入应用程序(添加 nuget)并且程序集自行注册它需要的一切。为此,assemble 具有程序集级属性,其类型应称为:

[assembly: WebActivator.PreApplicationStartMethod(typeof (ModuleBootstrapper), "Start")]

在新的辉煌asp.net5中,这种事情("lib initialization")有什么推荐的方法吗?

您可以通过 WebActivator 获得的功能在 ASP.NET 5 下是不可能的,我坚信它永远不会是因为 ASP.NET 5 的伟大之处之一pipeline 是你负责建立你的请求管道。所以,这个决定应该是经过深思熟虑的。例如:

我有一个中间件:

public class MonitoringMiddlware
{
    private RequestDelegate _next;

    public MonitoringMiddlware(RequestDelegate next)
    {
        _next = next;
    }

    public async Task Invoke(HttpContext httpContext)
    {
        // do some stuff on the way in

        await _next(httpContext);

        // do some stuff on the way out
    }
}

我可以将其打包并发布到 NuGet 提要。消费者需要将其拉入并将其添加到管道内的适当位置:

public class Startup
{
    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        // configure services here
    }

    public void Configure(IApplicationBuilder app)
    {
        app.UseStatusCodePages();
        app.UseFileServer();

        // I want middleware to sit here inside the pipeline.
        app.UseMiddleware<MonitoringMiddlware>();

        app.UseMvc(routes =>
        {
            routes.MapRoute("areaRoute", "{area:exists}/{controller}/{action}");
            routes.MapRoute(
                "controllerRoute",
                "{controller}",
                new { controller = "Home" });
        });
    }
}

所以,每当我进入这段代码时,我都可以看到管道是如何构建的,没有任何魔法。在 WebActivator 情况下,您需要查看其他几个地方来确定您的管道,最重要的是,您不会在它所在的位置做出决定。

所以,摆脱它并不是一件坏事。