asp.net-core - 防止 ASP.NET Core 在单独的程序集中发现 Controller

标签 asp.net-core .net-core

我有一个 ASP.NET Core API,它引用了一个包含 Controller 的 nuget 包。 .
默认情况下,此 Controller 已注册并可响应请求。但是,我只想在某些情况下添加它 - 例如如果它在 DEV 环境中。
我的 Startup看起来像这样:

services.AddControllers()
.AddMvcOptions(cfg => {
   cfg.Filters.Add(new CustomExceptionFilterAttribute())
});
我希望我需要调用 AddApplicationPart(typeof(ClassInPackage).Assembly)调用后AddCointrollers注册这个 Controller ?
有人可以建议一种可以启用/禁用此 Controller 注册的方法吗?

最佳答案

好的,我找到了解决方案 - 删除 ApplicationPart包含 Controller .仍然可以使用程序集中的任何其他依赖项。
在 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 包中编写了一个扩展方法
https://docs.microsoft.com/en-us/aspnet/core/mvc/advanced/app-parts?view=aspnetcore-5.0

关于asp.net-core - 防止 ASP.NET Core 在单独的程序集中发现 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64789567/

相关文章:

asp.net-core - NSwag - 我如何添加评论?

c# - 如何在 C# 中显示带有自定义消息的状态码?

c# - ASP.NET 5 MVC 6 通用存储库模式

docker - microsoft .net core 2.2 sdk docker容器可以用于构建2.1和2.2目标项目吗

.net-core - 无法使用 DI 内部函数与 .net core Azure Web 作业中的 ServiceBusTrigger 参数绑定(bind)服务实现

asp.net-mvc - Asp .Net Core - 无法安装 Microsoft.AspNet.Mvc nuget 包

c# - 如何解决 `dnx web`异常

c# - Couchbase 无法 MutateIn 多个带有 null 值的 upserts

c# - 找出网络核心 3.x 中网络 UNC 路径上的可用空间和总空间

c# - 具有参数和DI的ASP.Net Core筛选器