C# 我可以将ASP.NET核心控制器设置为内部控制器吗?
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
公共的
问题是我有一个控制器,它(在其构造函数中)依赖于某个内部的。这种依赖性依赖于内部的东西,它依赖于内部的东西,等等。所以我需要让控制器内部的
但是控制器工厂不会发现它
有没有办法让内部控制器可以被发现?如果你有这个(在你的问题中加入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());
});