ASP.Net Core承载外部程序集
时间:2019-11-08
本文章向大家介绍ASP.Net Core承载外部程序集,主要包括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"]
形式获取配置数据,判断是否正确。
- 通过构造函数注入,将
详细解读
原文地址:https://www.cnblogs.com/fuxuyang/p/11819328.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- php + WebUploader实现图片批量上传功能
- php查询内存信息操作示例
- ThinkPHP3.2框架操作Redis的方法分析
- python实现图像外边界跟踪操作
- php微信分享到朋友圈、QQ、朋友、微博
- Numpy 多维数据数组的实现
- 使用matplotlib的pyplot模块绘图的实现示例
- PHP get_html_translation_table()函数用法讲解
- Laravel中10个有用的用法小结
- PHP7 echo和print语句实例用法
- python上selenium的弹框操作实现
- php分享朋友圈的实现代码
- Laravel框架Request、Response及Session操作示例
- 利用scikitlearn画ROC曲线实例
- 小程序微信退款功能实现方法详解【基于thinkPHP】