【发布时间】:2019-09-24 09:42:20
【问题描述】:
我有一个场景,我们有许多小型 AspNet Core 网站的“标准化启动”。
实现这一点的一个看似显而易见的解决方案是将Startup.cs 类重构为一个单独的公共程序集(如Infrastructure.Web.Core.Startup)。然后,我们让每个小型 AspNet Core 网站引用它作为通用程序集,并改用该启动类:
public static Microsoft.AspNetCore.Hosting.IWebHostBuilder CreateWebHostBuilder( string[] args )
{
return new WebHostBuilder()
.UseKestrel()
.ConfigureServices( collection => { } )
.UseContentRoot( System.IO.Directory.GetCurrentDirectory() )
.UseStartup<Infrastructure.Web.Core.Startup>(); //.UseStartup<Startup>();
}
不知何故,这会破坏属性路由,因为路由没有被命中。没有错误,但没有路由。 当我将该类复制回网站项目(使用完全相同的代码)时,它再次工作。
作为测试,如果我将 Startup.cs 类包装在本地启动类的公共库中(如下所示),它也可以工作:
public class Startup
{
private readonly Infrastructure.Web.Core.Startup _startup;
public Startup( IConfiguration configuration )
{
_startup = new Infrastructure.Web.Core.Startup( configuration );
}
public IConfiguration Configuration => _startup.Configuration;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices( IServiceCollection services )
{
_startup.ConfigureServices( services );
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure( IApplicationBuilder app, IHostingEnvironment env )
{
_startup.Configure( app, env );
}
}
如果我不得不猜测,这可能与依赖注入有关。
有人有什么建议吗?
仅供参考:它使用的是典型的 AspNet Core 2.1 项目
更新 顺便说一句,如果我使用继承,它也可以工作,但派生类必须与网站在同一个项目中。我想这似乎很明显,但为了完整起见,我认为我包含了该信息:
public class Startup : Infrastructure.Web.Core.Startup
{
public Startup( IConfiguration configuration ) : base(configuration)
{
}
}
【问题讨论】:
标签: c# asp.net-core attributerouting