当前位置:网站首页>第59章 ApplicationPart内置依赖注入中间件
第59章 ApplicationPart内置依赖注入中间件
2022-08-01 19:35:00 【zhoujian_911】
由于nopCommerce是模板类型程序,必要的功能需要是:应用范围广泛、功能的强大和根据最终用户的需求,可以把最终用户所需要的功能灵活的集成到nopCommerce程序中,nopCommerce开发者为了满足这些相互矛盾的需求,通过定义不同功能的插件,让最终用户下载这些不同功能的插件并集成到nopCommerce程序中,从而让最终的程序适应用于不同的用户及其该用户灵活定制自己的程序功能,把功能插件集成到主程序中的关键技术实现是:ApplicationPart内置依赖注入中间件。
以插件集成的形成来增加整个程序的功能虽然具有:能够满足大范围的用户,并根据特定的用户需求灵活功能进行定制,但是这些也造就了程序的臃肿和效率的低下;在不断的集成不同功能插件的过程中,极其容易造成整个程序的崩溃,毕竟我们开发的只是一个Web应用程序,而不是一个系统程序,如果使用了ApplicationPart内置依赖注入中间件则造就了一个具有系统程序特性的Web应用程序。由上述因素如果不是大型公司,不是种资源达到一定程度,就不要在应用开发中使用插件,因为达不到这些标准就不可能开发出各项标准都符合基本标准的主程序和插件程序;其次如果应用场景只是针对特定客户,在Web应用程序开发中本人不建议使用ApplicationPart内置依赖注入中间件技术,更好的解决方案是:根据客户需求,在不断版本迭代过程中,把用户不断提出的功能直接内置定义到不同版本的主程序中。
但是ApplicationPart内置依赖注入中间件作为1种特定需求的技术实现,我们还是必须要理解它是怎样在程序中使用的。
1、定义插件类库项:DemoPlugin1。类库项的定义有两种方式:(1)通过类库定义DemoPlugin1项,但是这种方式不能在Views文件夹中新建cshtml(Razor)文件,只能复制Web项中的cshtml(Razor)文件,到该项目的Views文件夹中。 (2)通过Razor类库定义DemoPlugin1项,这样可以直接在DemoPlugin1项Views文件夹中新建cshtml(Razor)文件。nopCommerce程序使用的是第1种方式。
2、插件类库项中的cshtml(Razor)文件,在通过ApplicationPart内置依赖注入中间件集成到主程序时,有3种方式:(1)直把插件类库项中的cshtml(Razor)文件。的定义在插件类库项Views文件夹中,(2)把类库项中的cshtml(Razor)文件定义到主程序项的Views文件夹中,(3)在整个程序执行构建操作时。自动把把插件类库项中的cshtml(Razor)文件,复制到主程序的指定文件夹中,例如:在nopCommerce程序就是把这些cshtml(Razor)文件复制到了“Presentation\Nop.Web\Plugins” 文件夹中。
3、ApplicationPart内置依赖注入中间件插件集成cshtml(Razor)文件的方式也有2种:
1、注意:如果使用.Net(Core)5及其以前的框架版本,可以通过加载插件类库项Views文件夹中所有的cshtml(Razor)文件的动态库文件(xxx.Views.dll)和插件项类库文件通过ApplicationPart内置依赖注入中间件集成到主程序中,从而让主程序拥有插件项所定义的功能。另外也可以在程序构建中把把插件类库项Views文件夹中所有的cshtml(Razor)文件,复制到主程序指定的文件夹中,也可以实现让主程序拥有插件项所定义的功能。
2、注意:如果使用.Net(Core)6框架,不再支持生成xxx.Views.dll文件,所以通过ApplicationPart内置依赖注入中间件集成插件项也只剩下唯一的方法以供选择:即在程序构建时自动把把插件类库项中的cshtml(Razor)文件,复制到主程序的指定文件夹中。
微软给出的原因是(https://docs.microsoft.com/zh-cn/dotnet/core/compatibility/aspnet-core/6.0/razor-compiler-doesnt-produce-views-assembly):
提高使用 Razor 视图的应用程序的生成性能。
允许 Razor 视图参与 Visual Studio 的“热重载”体验。
本人为了简化ApplicationPart内置依赖注入中间件的对插件项的集成实现,把本来需要定义在插件类库项Views文件夹中的cshtml(Razor)文件,直接定义在了主程序的项的Views文件夹中,作为一个简单的示例程序这是可以接受的,但在实现开发中,做为工程性的软件,插件项的cshtml(Razor)文件,最好定义在插件项的的Views文件夹,这样更能体现“插件”的整体性和独立性原则,一个现成的示例:nopCommerce程序就是这么做的。
var builder = WebApplication.CreateBuilder(args);
var assembly = Assembly.LoadFile(AppDomain.CurrentDomain.BaseDirectory + "DemoPlugin1.dll");
var mvcBuilders = builder.Services.AddMvc();
var controllerAssemblyPart = new AssemblyPart(assembly);
mvcBuilders.ConfigureApplicationPartManager(apm =>
{
apm.ApplicationParts.Add(controllerAssemblyPart);
});
更多、更详细关于ApplicationPart内置依赖注入中间件的技术实现见:“https://www.cnblogs.com/lwqlun/p/11137788.html”。
22-07-29-058_WebApplicationPart(内置依赖注入中间件)。
边栏推荐
- GZIPOutputStream 类源码分析
- DAO development tutorial [WEB3.0]
- PHP 安全最佳实践
- Redis启动时提示Creating Server TCP listening socket *:6379: bind: No error
- MySQL开发技巧——并发控制
- C#/VB.NET Extract table from PDF
- 正则表达式
- ssh & scp
- Greenplum数据库源码分析——Standby Master操作工具分析
- In the background of the GBase 8c database, what command is used to perform the master-slave switchover operation for the gtm and dn nodes?
猜你喜欢
odoo coding conventions (programming conventions, coding guidelines)
30天刷题计划(五)
Database Plus 的云上之旅:SphereEx 正式开源 ShardingSphere on Cloud 解决方案
PanGu-Coder:函数级的代码生成模型
分享一个适用于MCU项目的代码框架
DAO开发教程【WEB3.0】
1个小时!从零制作一个! AI图片识别WEB应用!
10 个 PHP 代码安全漏洞扫描程序
Become a Contributor in 30 minutes | How to participate in OpenHarmony's open source contributions in multiple ways?
如何看待腾讯云数据库负责人林晓斌借了一个亿炒股?
随机推荐
When installing the GBase 8c database, the error message "Resource: gbase8c already in use" is displayed. How to deal with this?
图文详述Eureka的缓存机制/三级缓存
57:第五章:开发admin管理服务:10:开发【从MongoDB的GridFS中,获取文件,接口】;(从GridFS中,获取文件的SOP)(不使用MongoDB的服务,可以排除其自动加载类)
ThreadLocal讲义
XSS range intermediate bypass
nacos installation and configuration
手撸代码,Redis发布订阅机制实现
Ha ha!A print function, quite good at playing!
Pytorch模型训练实用教程学习笔记:三、损失函数汇总
Mobile Zero of Likou Brush Questions
Keras深度学习实战——交通标志识别
为你的“架构”安排定期体检吧!
Win11校园网无法连接怎么办?Win11连接不到校园网的解决方法
Find the sum of two numbers
What are the application advantages of SaaS management system?How to efficiently improve the digital and intelligent development level of food manufacturing industry?
ssh & scp
工作5年,测试用例都设计不好?来看看大神的用例设计总结
百度无人驾驶商业化已“上路”
Pytorch模型训练实用教程学习笔记:二、模型的构建
17. Load balancing