C# 如果启动位于不同的程序集中,则AspNet Core AttributeRouting不会发现路由
我有一个场景,我们为许多小型AspNet核心网站建立了一个“标准化启动” 一个看似显而易见的解决方案是将C# 如果启动位于不同的程序集中,则AspNet Core AttributeRouting不会发现路由,c#,asp.net-core,attributerouting,C#,Asp.net Core,Attributerouting,我有一个场景,我们为许多小型AspNet核心网站建立了一个“标准化启动” 一个看似显而易见的解决方案是将Startup.cs类重构为一个单独的公共程序集(如Infrastructure.Web.Core.Startup)。然后,我们让每个小型AspNet核心网站将其引用到公共程序集,并使用该启动类: public static Microsoft.AspNetCore.Hosting.IWebHostBuilder CreateWebHostBuilder( string[] a
Startup.cs
类重构为一个单独的公共程序集(如Infrastructure.Web.Core.Startup
)。然后,我们让每个小型AspNet核心网站将其引用到公共程序集,并使用该启动类:
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>();
}
如果让我猜一猜的话,这可能与依赖注入有关
有人有什么建议吗
仅供参考:它使用的是典型的AspNet核心2.1项目
更新
顺便说一句,如果我使用继承,它也可以工作,但是派生类必须与网站位于同一个项目中。我想这似乎是显而易见的,但我认为出于完整性考虑,我将这些信息包括在内:
public class Startup : Infrastructure.Web.Core.Startup
{
public Startup( IConfiguration configuration ) : base(configuration)
{
}
}
您可以通过在
Startup.cs
方法中将以下语句添加到您的服务中来解决此问题
services.AddApplicationPart(typeof(antypeinotherassembly.Assembly);
这将告诉视图/控制器发现也检查新位置。包含Startup.cs
文件的项目将是启动项目,而所有其他项目将只是引用和库或类似文件
从.Net Core 3开始,您可以使用名为Razor类库的工具,请参阅。这将自动将您的控制器和视图添加到发现中,它还具有调试支持,并将像普通类库一样工作
public class Startup : Infrastructure.Web.Core.Startup
{
public Startup( IConfiguration configuration ) : base(configuration)
{
}
}