当前位置:  开发笔记 > 编程语言 > 正文

我可以在内部创建ASP.NET核心控制器吗?

如何解决《我可以在内部创建ASP.NET核心控制器吗?》经验,为你挑选了2个好方法。

ASP.NET(和Core)控制器需要public.

问题是我有一个控制器,它依赖于(在它的构造函数中)某些东西internal.而且依赖性取决于内部的东西,这取决于内部的东西等等.所以我也需要制作控制器internal.

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

有没有办法使internal控制器可被发现?



1> Morten Chris..:

如果要包括内部控制器,则可以提供自己的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如何处理类型周围的极端情况。



2> CodeCaster..:

你有这个(在你的问题中包含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)
    {
        // ...
    }
}


这并不总是适合设计,不过在我的情况下确实如此,谢谢.最好能够配置控制器工厂以找到特定的内部控制器,但我不确定是否可行.
推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有