我有一个 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/