C# 我可以将ASP.NET核心控制器设置为内部控制器吗?

C# 我可以将ASP.NET核心控制器设置为内部控制器吗?,c#,asp.net,asp.net-core,C#,Asp.net,Asp.net Core,ASP.NET(和核心)控制器需要是公共的 问题是我有一个控制器,它(在其构造函数中)依赖于某个内部的。这种依赖性依赖于内部的东西,它依赖于内部的东西,等等。所以我需要让控制器内部的 但是控制器工厂不会发现它 有没有办法让内部控制器可以被发现?如果你有这个(在你的问题中加入a总是有帮助的): 您不能将FooDependency公开,但您需要FooController公开吗 然后需要将公共接口应用于内部依赖项: public interface IFooDependency { } inter

ASP.NET(和核心)控制器需要是
公共的

问题是我有一个控制器,它(在其构造函数中)依赖于某个
内部的
。这种依赖性依赖于内部的东西,它依赖于内部的东西,等等。所以我需要让控制器
内部的

但是控制器工厂不会发现它

有没有办法让
内部
控制器可以被发现?

如果你有这个(在你的问题中加入a总是有帮助的):

您不能将
FooDependency
公开,但您需要
FooController
公开吗

然后需要将公共接口应用于内部依赖项:

public interface IFooDependency
{

}

internal class FooDependency : IFooDependency
{

}

public class FooController
{
    public FooController(IFooDependency dependency)
    {
        // ...
    }
}

如果要包括内部控制器,可以提供自己的
ControllerFeatureProvider
类的实现,该类负责确定类型是否为控制器。在下面的示例中,我创建了一个实现,用于查找实现自定义基类的控制器,并在所有其他情况下返回默认实现。在这种情况下,自定义控制器将是可发现的,尽管是内部的,而所有其他控制器都不会

class CustomControllerFeatureProvider : ControllerFeatureProvider
{
    protected override bool IsController(TypeInfo typeInfo)
    {
        var isCustomController = !typeInfo.IsAbstract && typeof(MyCustomControllerBase).IsAssignableFrom(typeInfo);
        return isCustomController || base.IsController(typeInfo);
    }
}
并登记:

services.AddMvc().ConfigureApplicationPartManager(manager =>
{
    manager.FeatureProviders.Add(new CustomControllerFeatureProvider());
});

您可能应该查看
IsController的
,了解ASP.NET如何处理类型周围的边缘情况。

您能发布您所说的依赖关系吗?Public高于internal,如果依赖关系是内部的,那就无关紧要了。除非是在constructor@DevEstacion是的,在构造函数中。然后不要将其作为参数注入,在构造函数声明中实例化它或提供使用它的方法。@在我的情况下不可能使用devestation,它应该通过构造函数注入进入那里。这并不总是适合设计,尽管在我的情况下是这样,谢谢。最好能够配置控制器工厂以查找特定的内部控制器,但我不确定这是否可行。仍然会出血/强制使用公共类型。接口无需公开的理由:| Ty,这是一个完美的解决方案。我唯一想提到的是,如果您使用
services.AddControllers()
而不是
services.AddMvc()
,也可以。
services.AddMvc().ConfigureApplicationPartManager(manager =>
{
    manager.FeatureProviders.Add(new CustomControllerFeatureProvider());
});