zoukankan      html  css  js  c++  java
  • 消失的Controller

    我最近在研发基于.net core的公司8.0版本框架,现有如下项目结构:

     

    项目依赖关系如下:

    入口项目:Ricebird.BaseFramework,依赖于其它所有项目。

    Ricebird.Framework:配置项目,依赖倒置用,公用接口全部在这(内含Controller)

    Ricebird.DefaultUserCenter:用户模块(内含Controller)

    Ricebird.DataEngine:数据库服务

    Ricebird.Configurations:系统配置服务(内含Controller)

    Ricebird.Authentication:认证服务(内含Controller)

    现使用以下配置方法:

    var builder = services.AddMvc()

                    .AddControllersAsServices()

                    .AddNewtonsoftJson();

    现有问题,我能够正常访问在 入口项目 的 InstallApiController,但无法访问其它项目的Controller。

    请问:解决问题的原理和方法?

    答:阅读asp.net mvc源代码,可以看到模块的加载是由“ApplicationPart”实现的,通过在Startup中,书写以下代码:

     

    两个帮助函数都是从ASP.NET CORE的源代码中的:Microsoft.AspNetCore.Mvc.Core项目里翻出来的。其中:

    builder.PartManager.PopulateFeature(feature);

    var cs = feature.Controllers;

    就是ASP.NET CORE从程序集中加载Controller的实现方法。所以,只需要把Assembly加入到ApplicationPart里就可以完成任务。

    解决方案如下:从程序的加载器中,将所有的程序集导出,然后使用扩展类:

     

    即可实现。扩展类的类型要注意是IMvcBuilder。也就是说要写在services.AddMvc()的后面。

  • 相关阅读:
    list, tuple, dict, set的用法总结
    函数的参数
    常用库函数
    Postman 常用测试结果验证的方法
    Loadrunner 使用代理录制脚本
    POSTMAN脚本录制
    Fiddler模拟post四种请求数据
    Python函数修饰符@的使用
    robot framework集成Jenkins环境
    python的位置参数、默认参数、关键字参数、可变参数区别
  • 原文地址:https://www.cnblogs.com/Pray4U/p/13536444.html
Copyright © 2011-2022 走看看