【愚公系列】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
- 点赞
- 收藏
- 关注作者
评论(0)