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

时间:2015-04-13 13:42:42

标签: asp.net-core

以前(在asp.net 4.x中)通常的做法是将WebActivator类用于寄存器引导逻辑。
我知道现在我们有Startup类,可以配置所有内容。但是WebActivator我有更多的选择 - 可以将一个程序集放入一个app(添加一个nuget),并且程序集自己注册了它需要的所有内容。为此,汇编具有汇编级属性,其属性应该被调用:

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

现在在新的荣耀asp.net 5中推荐什么方法(“lib初始化”)?

1 个答案:

答案 0 :(得分:2)

在ASP.NET 5下无法使用WebActivator获得的功能,我坚信它永远不会成为因为ASP.NET 5管道的一大优点就是你负责建立您的请求管道。因此,应该刻意做出决定。举个例子:

我有一个中间件:

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 Feed。消费者需要将其添加到管道内的适当位置:

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的情况下,您需要查看其他几个地方来确定您的管道,最重要的是,您无法做出决定。

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