为了模块化,我在不同的程序集中创建了一些控制器。每个程序集表示一个有界的上下文(一个模块、一个子系统、一个分区等)。在整个系统中。
每个模块的控制器都是由对其他模块一无所知的人开发的,中央协调器将在一个应用程序中涵盖所有这些模块。
所以,有一个叫做学校的模块,里面有一个TeacherController。它的输出是Contoso.School.UserService.dll。
主编排器称为Education,它引用了Contoso.School.UserService.dll。
我的program.cs是:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args).UseKestrel()
.UseStartup<Startup>()
.Build();然而,对于教师控制器的路线,我得到404。如何在其他程序集中使用控制器?
发布于 2017-12-03 11:50:13
在ConfigureServices类的Startup方法中,您必须调用以下命令:
services.AddMvc().AddApplicationPart(assembly).AddControllersAsServices();其中assembly是表示Contoso.School.UserService.dll的实例Assembly。
您可以加载它,可以从任何包含的类型获取它,或者像这样:
var assembly = Assembly.Load("Contoso.School.UserService");发布于 2019-11-30 23:53:07
对于.NET Core3.0 API略有改变。,以及在Startup.cs中从外部程序集注册控制器的最简单方法如下:
public void ConfigureServices(IServiceCollection services)
{
var assembly = typeof(**AnyTypeFromRequiredAssembly**).Assembly;
services.AddControllers()
.PartManager.ApplicationParts.Add(new AssemblyPart(assembly));
}发布于 2020-05-15 05:29:19
在将遗留单元测试从.NET框架迁移到aspnet核心3.1时,我试图解析控制器,这是我让它工作的唯一方法:
var startupAssembly = typeof(Startup).Assembly;
var services = new ServiceCollection();
// Add services
...
// Add Controllers
services
.AddControllers()
.AddApplicationPart(startupAssembly)
.AddControllersAsServices();如果我更改最后三行的顺序,它就无法工作。
避免为单元测试这样做,除非您真的必须这样做,例如,由于遗留的原因。如果您没有使用遗留代码,您可能正在寻找https://learn.microsoft.com/en-us/aspnet/core/test/integration-tests?view=aspnetcore-3.1。
https://stackoverflow.com/questions/47617994
复制相似问题