以前一直比较好奇像swagger,cap,skywalking等组件是如何实现引用一个dll即可在网页上展示界面的,难道这么多html,js,css等都是硬编码写死在代码文件中的?后面接触apb里面也有虚拟文件的功能,一直没去深入了解,最近仔细看了一下他们的代码,发现内部其实就是用嵌入式文件(EmbeddedFile)来实现的,在项目中将html,css,js等文件的属性修改为“嵌入的资源”。

 此时编译后的dll就会包含这些数据文件,生成的嵌入式文件命名规则为:项目名称.物理路径1.物理路径2...文件名.扩展名,之后代码中可以通过当前项目的Assembly.GetManifestResourceInfo方法获取到这些文件,通过Assembly.GetManifestResourceNames方法可以获取到所有嵌入式资源

有了以上这些基础,如果我们想对外提供这些嵌入式文件的访问,只需要创建一个中间件,将请求的url转换成嵌入式资源的路径,获取对应的内容返回即可。例如swagger,cap,skywalking等各类组件自带的界面,就是在中间件中硬编码了url和相关嵌入式资源文件的映射关系,拦截到相关url后直接返回嵌入式资源文件,这样发布的组件就只需要dll即可,不再需要其它html,css,js文件了。

除了以上的自己通过中间件实现对嵌入式资源文件的访问外,.netcore中还内置了Microsoft.Extensions.FileProviders.EmbeddedFileProvider文件提供器,在调用UseStaticFiles时可以指定文件提供器,如下示例直接就可以对外提供这些嵌入式文件的访问了

1
2
3
4
app.UseStaticFiles(new StaticFileOptions()
{
    FileProvider = new EmbeddedFileProvider(typeof(Program).Assembly)
});

 

最后分享一个本人学习时写的一个虚拟文件系统,主要是参考学习了abp,swagger,.netcore的StaticFileMiddleware。其功能主要建立在UseStaticFiles之上,没有另外单独建立自己的中间件了,节约点代码和中间件吧,另外重写了EmbeddedFileProvider类,性能提升在4倍以上。具体使用方法参照VirtualFileSystem的readme

VirtualFileSystem: 虚拟文件系统,可用于支持嵌入式文件 (gitee.com)

 

posted @ 2023-06-08 08:34 sunyuliang 阅读(770) 评论(5) 推荐(6) 编辑
摘要: 先抄个雪花ID介绍,雪花算法: 雪花ID是用一个64位的整形数字来做ID,对应.net中的long,数据库中的bigint,雪花算法的原始版本是scala版,用于生成分布式ID(纯数字,时间顺序),订单编号等。 自增ID:对于数据敏感场景不宜使用,且不适合于分布式场景。GUID:采用无意义字符串,数 阅读全文
posted @ 2020-01-07 14:37 sunyuliang 阅读(24462) 评论(40) 推荐(52) 编辑
摘要: jTopo是什么? jTopo(Javascript Topology library)是一款完全基于HTML5 Canvas的关系、拓扑图形化界面开发工具包。 jTopo关注于数据的图形展示,它是面向开发人员的,需要进行二次开发。 使用jTopo很简单,可以快速创建一些关系图、拓扑等相关图形化的展 阅读全文
posted @ 2019-12-13 21:02 sunyuliang 阅读(1223) 评论(0) 推荐(0) 编辑
摘要: 领域建模有很多种方法,对于同样的问题域使用不同的建模手段得到的模型可能也不尽相同。于是我经常听到这样一个问题:怎么才能保证建模的正确性? 领域建模有很多种方法,对于同样的问题域使用不同的建模手段得到的模型可能也不尽相同。于是我经常听到这样一个问题:怎么才能保证建模的正确性? 这听起来是个合理的质疑, 阅读全文
posted @ 2019-10-26 01:14 sunyuliang 阅读(1810) 评论(0) 推荐(1) 编辑
摘要: 上一编讲了cap2.6的快速入门,这次我们来讲讲在控制台中如何使用cap2.6。因为cap2.6的内存模式目前已经可以使用了,相关组件已经更新,所以这次我们以简单的内存模式为例。 1:创建项目 创建一个名叫CAPConsoleDemo的 “控制台应用(.NET Core)” 程序,.netcore版 阅读全文
posted @ 2019-09-02 17:42 sunyuliang 阅读(2009) 评论(1) 推荐(5) 编辑
摘要: CAP介绍: CAP是一个用来解决微服务或者分布式系统中分布式事务问题的一个开源项目解决方案。可以解决跨服务器的数据一致性问题。一个简单的列子,如:订单系统创建订单后需要通知邮件通知用户下单成功,解决方案有下面几种: 1:创建订单时同步调用邮件发送,邮件发送失败则整个订单创建失败,这样保证了一致性, 阅读全文
posted @ 2019-08-30 16:12 sunyuliang 阅读(3221) 评论(4) 推荐(14) 编辑
摘要: 当我们用很多服务时,各个服务间的调用关系是怎么样的?各个服务单调用的顺序\时间性能怎么样?服务出错了,到底是哪个服务引起的?这些问题我们用什么方案解决呢,以前的方式是各个系统自己单独做日志,出了问题从暴出问题的服务开始一个一个服务的排查,耗时耗力,有些日志不全的,还不一定查得出来。好在现在有Skyw 阅读全文
posted @ 2019-08-28 17:18 sunyuliang 阅读(11403) 评论(20) 推荐(12) 编辑
摘要: Skywalking简单介绍 Skywalking是一个应用性能管理(APM)系统,具有服务器性能监测,应用程序间调用关系及性能监测等功能,Skywalking分为服务端、管理界面、以及嵌入到程序中的探针部分,由程序中的探针采集各类调用数据发送给服务端保存,在管理界面上可以查看各类性能数据。本文介绍 阅读全文
posted @ 2019-08-28 13:47 sunyuliang 阅读(15745) 评论(6) 推荐(4) 编辑
摘要: 本文基于unbuntu18.04版本来安装docker,步骤如下: 1:右击桌面->打开终端(E). 2::输入以下命令: sudo snap install docker ,输入密码之后出下图的下载进度,等待下载完成。 3:输入 sudo docker version 命令,显示如下版本信息。到此 阅读全文
posted @ 2019-08-28 11:21 sunyuliang 阅读(3532) 评论(0) 推荐(0) 编辑
点击右上角即可分享
微信分享提示