愚公系列2022年03月 .NET架构班 020-ABP vNext 虚拟文件系统

网友投稿 653 2022-05-29

前言

虚拟文件系统可以管理文件系统(磁盘)上实际不存在的文件。 它主要用于将(js,css,image,cshtml …)文件嵌入到程序集中,并在运行时将它们用作物理文件。

一、集成虚拟文件系统

1、先在EBusiness.Application项目中通过Nuget下载

Volo.Abp.VirtualFileSystem

2、然后在EBusinessApplicationModule文件上增加(默认不需要加载,因为其他模块已经集成)

[DependsOn(typeof(AbpVirtualFileSystemModule))] public class EBusinessApplicationModule: AbpModule {}

3、然后在EBusiness.Application项目中EBusinessApplicationModule类中添加

// 虚拟文件系统 public class EBusinessApplicationModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { .... Configure(options => { options.FileSets.AddEmbedded( // 那个项目中的文件 baseNamespace: "EBusiness.Application" // 默认命名空间 ); }); .... } }

4、最后使用EBusiness.Application项目中WxPayAppService类中使用IVirtualFileProvider接口获取指定文件

public class WxPayAppService : EBusinessAppService, IPayAppService { .... public IVirtualFileProvider _virtualFileProvider { set; get; } .... public string CreatePay(string productName, string orderSn, string totalPrice) { ..... var file = _virtualFileProvider.GetFileInfo("/Pays/certs/apiclient_cert.p12"); NativePay nativePay = new NativePay(); nativePay.description = productName; nativePay.out_trade_no = orderSn; nativePay.amount.total = int.Parse(float.Parse(totalPrice) * 100 + ""); // 2、支付对象转换成json string nativePayJson = JsonConvert.SerializeObject(nativePay); // 3、创建支付 string result = _wxPayHttpClient. WeChatPostAsync(nativeUrl, nativePayJson, file.PhysicalPath, mchid, certSerialNo).Result; return result; } }

5、AddEmbedded 配置参赛

AddEmbedded 扩展方法需要一个类, 从给定类的程序集中查找所有嵌入文件, 并将它们注册到虚拟文件系统. 通常将模块类作为通用参数传递.

AddEmbedded 有两个可选参数;

baseNamespace: 仅在你没有配置上面说明的GenerateEmbeddedFilesManifest并且你的根名称空间不为空时,才可能需要这样做. 在这种情况下,请在此处设置你的根名称空间.

baseFolder:如果你不想公开项目中的所有嵌入式文件,只希望公开特定的文件夹(和子文件夹/文件),可以相对于项目根页面设置基本文件夹.

Configure(options => { options.FileSets.AddEmbedded( baseNamespace: "Acme.BookStore.MyFiles", baseFolder: "/MyFiles" ); });

这个例子假设;

你的项目根(default)命令空间是 Acme.BookStore.

【愚公系列】2022年03月 .NET架构班 020-ABP vNext 虚拟文件系统

你的项目有一个名为 MyFiles 的目录.

你只想添加 MyFiles 目录到虚拟文件系统.

二、WEB项目使用虚拟文件系统

1、先在EBusiness.Web项目中通过Nuget下载

Volo.Abp.VirtualFileSystem

2、然后在EBusinessWebnModule文件上增加(默认不需要加载,因为其他模块已经集成)

[DependsOn(typeof(AbpVirtualFileSystemModule))] public class EBusinessWebModule: AbpModule {}

3、然后在EBusiness.Web项目中EBusinessWebModule类中添加

// 虚拟文件系统 public class EBusinessWebModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { .... Configure(options => { options.FileSets.AddEmbedded( // 那个项目中的文件 baseNamespace: "EBusiness.Web" // 默认命名空间 ); }); .... } }

三、虚拟文件替换功能

1、EBusiness.Web项目中EBusinessWebModule类中添加

// 虚拟文件系统 public class EBusinessWebModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { .... Configure(options => { options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Domain.Shared")); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Domain")); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Application.Contracts")); options.FileSets.ReplaceEmbeddedByPhysical(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Application")); options.FileSets.ReplaceEmbeddedByPhysical(hostingEnvironment.ContentRootPath); ); }); .... } }

.NET 虚拟化

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:异常
下一篇:Python递归遍历文件夹搜索文件 脚本MagicSearch.py
相关文章