【愚公系列】2022年03月 .NET架构班 020-ABP vNext 虚拟文件系统
【摘要】 前言虚拟文件系统可以管理文件系统(磁盘)上实际不存在的文件。 它主要用于将(js,css,image,cshtml …)文件嵌入到程序集中,并在运行时将它们用作物理文件。 一、集成虚拟文件系统1、先在EBusiness.Application项目中通过Nuget下载Volo.Abp.VirtualFileSystem2、然后在EBusinessApplicationModule文件上增加(...
前言
虚拟文件系统可以管理文件系统(磁盘)上实际不存在的文件。 它主要用于将(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<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<EBusinessApplicationModule>( // 那个项目中的文件
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<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<MyModule>(
baseNamespace: "Acme.BookStore.MyFiles",
baseFolder: "/MyFiles"
);
});
这个例子假设;
- 你的项目根(default)命令空间是 Acme.BookStore.
- 你的项目有一个名为 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<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<EBusinessWebModule>( // 那个项目中的文件
baseNamespace: "EBusiness.Web" // 默认命名空间
);
});
....
}
}
三、虚拟文件替换功能
1、EBusiness.Web项目中EBusinessWebModule类中添加
// 虚拟文件系统
public class EBusinessWebModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
....
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.ReplaceEmbeddedByPhysical<EBusinessDomainSharedModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Domain.Shared"));
options.FileSets.ReplaceEmbeddedByPhysical<EBusinessDomainModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Domain"));
options.FileSets.ReplaceEmbeddedByPhysical<EBusinessApplicationContractsModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Application.Contracts"));
options.FileSets.ReplaceEmbeddedByPhysical<EBusinessApplicationModule>(Path.Combine(hostingEnvironment.ContentRootPath, $"..{Path.DirectorySeparatorChar}EBusiness.Application"));
options.FileSets.ReplaceEmbeddedByPhysical<EBusinessWebModule>(hostingEnvironment.ContentRootPath);
);
});
....
}
}
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
转 https://bbs.huaweicloud.com/blogs/336576
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)