• ASP.Net Core承载外部程序集


    故事背景

      一般情况下ASP.Net Core项目配置可以直接在appsetting.json中添加,也可以在项目中添加新的配置文件。但如果想和其他项目一起实现配置文件通用呢?我们可以用绝对定位去访问配置文件,但可能会遇到访问权限之类的问题;我们也可以通过开发配置文件访问接口来实现,但太麻烦了,而且不可能加了一个配置我就去改一次访问代码。那么,官方有木有提供什么方案呢?

      有的,微软官方提供了允许ASP.Net Core承载外部程序集功能,实现逻辑就是通过外部类实现IHostingStartup接口,在启动时从外部程序集向应用添加增强功能。针对我们前面提到的外部项目向ASP.Net Core中添加配置文件需求是如何实现的呢?无非ASP.Net Core在启动时执行启动依赖程序集中指定特性的类中的Configure方法,而在该方法下将需要共享的配置添加到ASP.Net Core运行时中。

    基本流程

    外部类库程序集
    • 创建类库项目HostingStartupLibrary

    • 打开Nuget管理界面,依次安装Microsoft.AspNetCore.Hosting(2.2.7)Microsoft.Extensions.Configuration(3.0.0)包。

    • 新增承载类ServiceKeyInjection,实现IHostingStartup接口的Configure方法,添加部分数据到内存中。

      using System.Collections.Generic;
      using Microsoft.AspNetCore.Hosting;
      using Microsoft.Extensions.Configuration;
      
      [assembly: HostingStartup(typeof(HostingStartupLibrary.ServiceKeyInjection))]
      namespace HostingStartupLibrary
      {
          public class ServiceKeyInjection : IHostingStartup
          {
              var dict = new Dictionary<string, string>()
              {
                  {"DevAccount_FromLibrary", "DEV_1111111-1111"}
              };
      
              //配置方法一:主项目配置优先加载,再加载当前配置。
              builder.ConfigureAppConfiguration(config =>
              { 
                  config.AddInMemoryCollection(dict);
              });
      
              //配置方法二:当前配置优先加载,再加载主项目配置。
              //var builderConfig = new ConfigurationBuilder().AddInMemoryCollection(dict).Build();
              //builder.UseConfiguration(builderConfig); 
          }
      }
      
    ASP.Net Core主项目
    • 添加对类库项目HostingStartupLibrary的引用,也可以直接引用类库项目编译后的dll文件。
    • 配置主机启动依赖程序集,配置方法有两种:主机配置与环境变量配置。若同时设置了主机配置与环境变量配置,则实际采用主机配置控制。
      • 主机配置

        • 打开Program.cs,找到CreateHostBuilder方法。
        • UseStartup<Startup>()之前,webBuilder之后添加UseSetting(WebHostDefaults.HostingStartupAssembliesKey, "HostingStartupLibrary"),HostingStartupLibrary即为外部程序集的名称。
      • 环境变量配置

        • 打开launchSettings.json文件;
        • 找到所有的environmentVariables节点,在该节点下面添加ASPNETCORE_HOSTINGSTARTUPASSEMBLIES,值为HostingStartupLibrary,即外部程序集名称。
    • 配置获取测试。
      • 通过构造函数注入,将IConfiguration注入到控制器中。
      • 通过config["DevAccount_FromLibrary"]形式获取配置数据,判断是否正确。

    详细解读

  • 相关阅读:
    CentOS 编译安装 MySQL5.7
    ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var mysql 启动不了
    Linux里如何查找文件内容
    linux怎么模糊查找一个文件
    centos7下使用yum安装mysql
    centos下完全卸载mysql
    Linux下安装配置Nexus
    Linux下建立Nexus私服
    阿里云主机上安装jdk
    java war run
  • 原文地址:https://www.cnblogs.com/fuxuyang/p/11819328.html
Copyright © 2020-2023  润新知