Asp.net core 防止ASP.NET Core在单独的程序集中发现控制器

Asp.net core 防止ASP.NET Core在单独的程序集中发现控制器,asp.net-core,.net-core,Asp.net Core,.net Core,我有一个ASP.NET核心API,它引用了一个包含控制器的nuget包 默认情况下,此控制器已注册,可以响应请求。但是,我只想在某些情况下添加它——例如,如果它在开发环境中 我的启动如下所示: services.AddControllers() .AddMvcOptions(cfg => { cfg.Filters.Add(new CustomExceptionFilterAttribute()) }); 我希望在调用AddCointrollers后需要调用AddApplicati

我有一个ASP.NET核心API,它引用了一个包含
控制器的nuget包

默认情况下,此控制器已注册,可以响应请求。但是,我只想在某些情况下添加它——例如,如果它在开发环境中

我的
启动
如下所示:

services.AddControllers()
.AddMvcOptions(cfg => {
   cfg.Filters.Add(new CustomExceptionFilterAttribute())
});
我希望在调用
AddCointrollers
后需要调用
AddApplicationPart(typeof(ClassInPackage).Assembly)
来注册此控制器


有人能告诉我如何启用/禁用此控制器的注册吗?

好的,我找到了一个解决方案-删除包含
控制器的
应用程序部分。程序集中的任何其他依赖项仍然可以使用

在Startup.cs/中,无论您在何处执行IoC:

if(hideControllerFromOtherAssembly)
{
   var appPartManager = (ApplicationPartManager)services.FirstOrDefault(a => a.ServiceType == typeof(ApplicationPartManager)).ImplementationInstance;
   var mockingPart = appPartManager.ApplicationParts.FirstOrDefault(a => a.Name == "MyMockLibrary.Namespace");

   if(mockingPart != null)
   {
      appPartManager.ApplicationParts.Remove(mockingPart);
   }
}
您还可以通过扩展方法操作
ApplicationParts

AddMvc().ConfigureApplicationPartManager()
这不适合我,因为我在nuget包中编写了一个扩展方法


这是否回答了您的问题@DavidEdel它会阻止动作方法的执行,但端点在swagger等上仍然可见,因此理想情况下我们也可以将其隐藏在那里..如果像这样的条件指令#如果调试#endif能帮你吗?你也可以使用属性路由。只是一个旁注。只是想象一下,有人编写了许多高度可定制的控制器。您是此类控制器库的用户。您很挑剔,不想拥有所有控制器。您真的想作为客户手动移除所有控制器吗?????