ASP.NET(和Core)控制器需要public
.
问题是我有一个控制器,它依赖于(在它的构造函数中)某些东西internal
.而且依赖性取决于内部的东西,这取决于内部的东西等等.所以我也需要制作控制器internal
.
但是控制器工厂不会发现它.
有没有办法使internal
控制器可被发现?
如果要包括内部控制器,则可以提供自己的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如何处理类型周围的极端情况。
你有这个(在你的问题中包含MCVE总是有帮助的):
internal class FooDependency { } public class FooController { public FooController(FooDependency dependency) { // ... } }
你不能FooDependency
公开,但你需要FooController
公开吗?
然后,您需要将公共接口应用于内部依赖项:
public interface IFooDependency { } internal class FooDependency : IFooDependency { } public class FooController { public FooController(IFooDependency dependency) { // ... } }