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
情况下,您需要查看其他几个地方来确定您的管道,最重要的是,您不会在它所在的位置做出决定。
所以,摆脱它并不是一件坏事。
以前(在 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
情况下,您需要查看其他几个地方来确定您的管道,最重要的是,您不会在它所在的位置做出决定。
所以,摆脱它并不是一件坏事。