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"]
形式获取配置数据,判断是否正确。
- 通过构造函数注入,将
详细解读
ASP.Net Core承载外部程序集的更多相关文章
- C# 嵌入dll 动软代码生成器基础使用 系统缓存全解析 .NET开发中的事务处理大比拼 C#之数据类型学习 【基于EF Core的Code First模式的DotNetCore快速开发框架】完成对DB First代码生成的支持 基于EF Core的Code First模式的DotNetCore快速开发框架 【懒人有道】在asp.net core中实现程序集注入
C# 嵌入dll 在很多时候我们在生成C#exe文件时,如果在工程里调用了dll文件时,那么如果不加以处理的话在生成的exe文件运行时需要连同这个dll一起转移,相比于一个单独干净的exe,这种形 ...
- 【懒人有道】在asp.net core中实现程序集注入
前言 在asp.net core中,我巨硬引入了DI容器,我们可以在不使用第三方插件的情况下轻松实现依赖注入.如下代码: // This method gets called by the runti ...
- ASP.NET Core 使用外部登陆提供程序登陆的流程,以及身份认证的流程 (转载)
阅读目录 在Asp.Net Core 中使用外部登陆(google.微博...) 中间件管道 The Authentication Middleware The Challenge 与认证中间件进行交 ...
- asp.net core 中灵活的配置方式
asp.net core支持外部文件和命令行参数方式来配置系统运行所需要的配置信息,我们从下面两个常用场景来具体说下具体使用方法. 一.监听地址及端口配置 1,命令行方式 asp.net core系统 ...
- ASP.NET Core 中文文档 第四章 MVC(3.6.1 )Tag Helpers 介绍
原文:Introduction to Tag Helpers 作者:Rick Anderson 翻译:刘浩杨 校对:高嵩(Jack) 什么是 Tag Helpers? Tag Helpers 提供了什 ...
- ASP.NET Core 3.0 使用gRPC
一.简介 gRPC 是一个由Google开源的,跨语言的,高性能的远程过程调用(RPC)框架. gRPC使客户端和服务端应用程序可以透明地进行通信,并简化了连接系统的构建.它使用HTTP/2作为通信协 ...
- ASP.NET .Core 集成 React SPA 应用
AgileConfig的UI使用react重写快完成了.上次搞定了基于jwt的登录模式(AntDesign Pro + .NET Core 实现基于JWT的登录认证),但是还有点问题.现在使用reac ...
- IIS在ASP.NET Core下的两种部署模式
KestrelServer最大的优势体现在它的跨平台的能力,如果ASP.NET CORE应用只需要部署在Windows环境下,IIS也是不错的选择.ASP.NET CORE应用针对IIS具有两种部署模 ...
- ASP.NET Core 6框架揭秘实例演示[25]:配置与承载环境的应用
与服务注册一样,针对配置的设置同样可以采用三种不同的编程模式.第一种是利用WebApplicationBuilder的Host属性返回的IHostBuilder对象,它可以帮助我们设置面向宿主和应用的 ...
随机推荐
- 《python解释器源码剖析》第4章--python中的list对象
4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...
- python常用模块:pickle、shelve、json、xml、configparser
今日内容主要有: 一.pickle模块二.shelve模块三.json模块四.json练习五.xml模块 六.xml练习七.configparser模块 一.pickle模块 #pickle是一个用来 ...
- [ZOJ 3063] Draw Something Cheat
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4706 思路:字符串是一个集合(由0到多个A~Z字符组成),我们可以假 ...
- 【input】标签去除默认样式
input{-webkit-appearance: none; -moz-appearance: none; -o-appearance: none; appearance: none;}
- 如何阻止<a>标签默认行为和表单提交
阻止<a>标签默认行为 方式一 (通过return false) <!DOCTYPE html> <html> <head> <meta char ...
- react 项目 mock数据
前言 我们都知道在实际的开发阶段,后端接口开发是和前端开发同步进行,甚至迟于前端的进度,这就直就导致前端需要等待后端接口的时间. 这种情况就严重导致前端开发缓慢,那这时候前端的开发人员只能写静态模拟数 ...
- 【计算机-虚拟wifi】Win7虚拟wifi设置
虚拟Wifi,可以让电脑变成无线路由器,实现共享上网. 设置步骤 1.以管理员身份运行:cmd.exe 2.启动并设置虚拟网卡: 命令窗口中输入: netsh wlan set host ...
- [人物存档]【AI少女】【捏脸数据】魔幻世界
人物+衣物.zip
- 《剑指offer》算法题第六天
今日题目: 顺时针打印矩阵 包含min函数的栈 栈的压入.弹出序列 从上到下打印二叉树 二叉树搜索树的后序遍历序列 二叉树中和为某一值的路径 今天的题目都比较简单,下面一一介绍: 1. 顺时针打印矩阵 ...
- linux下su设置无密码模式
1.首先切换到root用户下 2.进到etc目录 cd /etc 3. 修改文件的权限 chmod u+w /etc/sudoers 4. 修改文件 vim /etc/sudoers