以前(在asp.net 4.x中)通常的做法是将WebActivator
类用于寄存器引导逻辑。
我知道现在我们有Startup
类,可以配置所有内容。但是WebActivator
我有更多的选择 - 可以将一个程序集放入一个app(添加一个nuget),并且程序集自己注册了它需要的所有内容。为此,汇编具有汇编级属性,其属性应该被调用:
[assembly: WebActivator.PreApplicationStartMethod(typeof (ModuleBootstrapper), "Start")]
现在在新的荣耀asp.net 5中推荐什么方法(“lib初始化”)?
答案 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
的情况下,您需要查看其他几个地方来确定您的管道,最重要的是,您无法做出决定。
所以,摆脱它并不是一件坏事。