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()的后面。

  • 相关阅读:
    selenium之css selector
    selenium之xpath
    selenium的一些概念
    HTML基础(四)JS
    HTML基础(三)DOM操作
    HTML基础(二)CSS
    HTML基础(一)HTML标签
    python学习笔记(六)发邮件、写日志、操作redis、导入模块
    python学习笔记(五)模块、第三方模块安装、模块导入
    python学习笔记(四)函数(下)、模块、集合
  • 原文地址:https://www.cnblogs.com/Pray4U/p/13536444.html
Copyright © 2011-2022 走看看