gpt4 book ai didi

c# - 如何有条件地删除 Controller 由 ASP.NET Core 注册并添加到 ServiceCollection

转载 作者:行者123 更新时间:2023-12-02 03:02:23 25 4
gpt4 key购买 nike

我们有带有标准 Microsoft.Extensions.DependencyInjection 的 ASP.NET Core 解决方案,并且需要根据配置设置注册某些控件。

一些继承自 ControllerBase 的示例 ApiController 及其所有相关操作仅应在某些 bool 为 true 时注册。

这可能吗?我查看了 services.AddMvc() 但我没有看到任何可以轻松让我执行以下任一操作的选项:

  • 阻止某些 ExampleController 被注册
  • 注册后从 IServiceCollection 中删除 ExampleController 及其所有相关操作

最佳答案

正如评论中所指出的,实现功能过滤器并将其注册到您的服务配置中:

public class MyFeatureProvider: ControllerFeatureProvider
{
private readonly bool condition;

public MyFeatureProvider(bool condition)
{
this.condition = condition;
}

protected override bool IsController(TypeInfo typeInfo)
{
if (condition && typeInfo.Name == "ExampleController")
{
return false;
}
return base.IsController(typeInfo);
}
}

public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().ConfigureApplicationPartManager(mgr =>
{
mgr.FeatureProviders.Clear();
mgr.FeatureProviders.Add(new MyFeatureProvider(true));
});
}
}

我会链接the source code如果您想查看库存标准实现并了解其工作原理以供引用

关于c# - 如何有条件地删除 Controller 由 ASP.NET Core 注册并添加到 ServiceCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59623460/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com