gro*_*kky 7 c# asp.net asp.net-core
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);
}
}
Run Code Online (Sandbox Code Playgroud)
并注册:
services.AddMvc().ConfigureApplicationPartManager(manager =>
{
manager.FeatureProviders.Add(new CustomControllerFeatureProvider());
});
Run Code Online (Sandbox Code Playgroud)
您可能应该看看的实现,IsController以了解ASP.NET如何处理类型周围的极端情况。
你有这个(在你的问题中包含MCVE总是有帮助的):
internal class FooDependency
{
}
public class FooController
{
public FooController(FooDependency dependency)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
你不能FooDependency公开,但你需要FooController公开吗?
然后,您需要将公共接口应用于内部依赖项:
public interface IFooDependency
{
}
internal class FooDependency : IFooDependency
{
}
public class FooController
{
public FooController(IFooDependency dependency)
{
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1785 次 |
| 最近记录: |