ABP模块运行解析
从官方创建一份ASP.NET CORE 2.0的项目,并加入源码调试,可以看出如下图的加载顺序
1.ABP是通过什么样的机制加载的
既然ABP中模块需要添加DLL到引用中,又要加入DependsOn在类前面,前者已经在程序集中加入了,后天是做的什么工作?
现有Module A依赖Module B
假设Module B 和Module A都是静态类,可能就不需要进行物理关联了,DependsOn也是没有什么用的。
通过分析源码可以看出,整个ABP实际就是对依赖注册和控制反转的管理。ABP Modules也不例外。
2.ABP的模块如何调用依赖模块中的其他类,例如
例如ModuleB有IUserService和IRoleService,那么我们如何调用他呢。
在IOC架构的系统中,万年不变的顺序就是
(1)找到相关类,并通过Ioc注册
(2)使用的时候通过控制反转,依赖注入即可
在ABP中,模块的加载,只负责各个模块的加载、释放。不负责具体模块内的类注册。
在ABP中,各个模块中需要注册使用的类通过PreInitialize方法进行自行管理。
例如 Abp.AutoMapper中的AbpAutoMapperModule
public override void PreInitialize()
{
IocManager.Register<IAbpAutoMapperConfiguration, AbpAutoMapperConfiguration>(); Configuration.ReplaceService<ObjectMapping.IObjectMapper, AutoMapperObjectMapper>(); Configuration.Modules.AbpAutoMapper().Configurators.Add(CreateCoreMappings);
}
3.系统核心的类是通过什么方式注入的
ABP系统核心的类注册都放到了Abp.Dependency.Installers 下的AbpCoreInstaller.cs文件中
通过AbpBootstrapper.Initialize 来注册 IocManager.IocContainer.Install(new AbpCoreInstaller());
/// <summary>
/// Initializes the ABP system.
/// 初始化ABP系统
/// </summary>
public virtual void Initialize()
{
//获取日志
ResolveLogger(); try
{
//获取启动类
RegisterBootstrapper();
//注册基础的类
IocManager.IocContainer.Install(new AbpCoreInstaller());
//获取插件 添加PlugInSources
IocManager.Resolve<AbpPlugInManager>().PlugInSources.AddRange(PlugInSources);
//获取AbpStartupConfiguration 并初始化
IocManager.Resolve<AbpStartupConfiguration>().Initialize();
//使用Abp模块管理器
_moduleManager = IocManager.Resolve<AbpModuleManager>();
//初始化模块
_moduleManager.Initialize(StartupModule);
//启动模块
_moduleManager.StartModules();
}
catch (Exception ex)
{
_logger.Fatal(ex.ToString(), ex);
throw;
}
}
4.ABP是否支持插件式方式加载
官方目前所有的实例,都是通过引用加载DLL来实现依赖。实际上ABP是支持Plugins方式指定目录存放DLL文件的。
这也不难理解,既然ABP的Module工作方式,是独立的,那么DLL程序集存放在哪里都是一样的。
在官方给出的文档 已有说明 https://aspnetboilerplate.com/Pages/Documents/Module-System
我们可以通过AddAbp服务实现
services.AddAbp<MyStartupModule>(options =>
{
options.PlugInSources.Add(new FolderPlugInSource(@"C:\MyPlugIns"));
});
5.了解了ABP的模块工作方式,我们就可以依葫芦画瓢,实现相同的工作原理。
实际上我再关注另一个框架 http://www.zkweb.org/ 其模块依赖的原理是跟ABP一样的,实现方法不一样而已。
ABP模块运行解析的更多相关文章
- ABP+AdminLTE+Bootstrap Table权限管理系统第三节--abp分层体系,实体相关及ABP模块系统
返回总目录:ABP+AdminLTE+Bootstrap Table权限管理系统一期 ABP模块系统 说了这么久,还没有详细说到abp框架,abp其实基于DDD(领域驱动设计)原则的细看分层如下: 再 ...
- ABP(现代ASP.NET样板开发框架)系列之4、ABP模块系统
点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)” ...
- Unity加载模块深度解析(Shader)
作者:张鑫链接:https://zhuanlan.zhihu.com/p/21949663来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 接上一篇 加载模块深度解析(二 ...
- Unity加载模块深度解析(网格篇)
在上一篇 加载模块深度解析(一)中,我们重点讨论了纹理资源的加载性能.这次,我们再来为你揭开其他主流资源的加载效率. 这是侑虎科技第53篇原创文章,欢迎转发分享,未经作者授权请勿转载.同时如果您有任何 ...
- 基于DDD的.NET开发框架 - ABP模块设计
返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应 ...
- ABP模块设计
ABP模块设计 返回ABP系列 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ASP.NET Boilerplate是一个用最佳实践和流行技术 ...
- ABP模块系统
ABP模块系统 基于DDD的现代ASP.NET开发框架--ABP系列之4.ABP模块系统 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP ...
- PS常见错误-无法完成请求,因为文件格式模块不能解析该文件
无法完成请求,因为文件格式模块不能解析该文件 将图片格式变成.jpg格式就可以了
- perl6 JSON::Fast模块json解析的使用
关于JSON: JSON (JavaScript Object Notation)是一种轻量级的数据交换格式,语法简单,各种语言都有相应的库或者模块支持. 因为JSON非常小巧,解析起来又非常简单,我 ...
随机推荐
- 前端错误监控,sentry入门配置详细教程
一.前言 最近经理说要把公司项目结合sentry用起来,然后组长不想做,老员工也不想做,分配任务就这么分配给我了,很荣幸接锅,摸索了几天,了解了一些基本配置,深一点的玩法可能还得实践一段时间,这里对于 ...
- XSS漏洞扫描工具:BruteXSS
下载Brute,一个xss漏洞扫描工具:https://codeload.github.com/shawarkhanethicalhacker/BruteXSS/legacy.zip/master 我 ...
- vscode使用汇总——常用插件、常用配置、常用快捷键
一.代码提示快捷键设置:(keybindings.json) [ { "key": "ctrl+j", "command": "- ...
- sql特殊语法
MYSQL --判断非空select ifnull(null,'666');--666select ifnull(null,null);--null--合并字段select CONCAT('666', ...
- [Laravel] Laravel的基本数据库操作部分
[laravel] laravel的数据库配置 找到程序目录结构下.env文件 配置基本的数据库连接信息 DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=blog ...
- 13.Linux键盘按键驱动 (详解)
在上一节分析输入子系统内的intput_handler软件处理部分后,接下来我们开始写input_dev驱动 本节目标: 实现键盘驱动,让开发板的4个按键代表键盘中的L.S.空格键.回车键 1.先来介 ...
- ImmediateFunc.js
(function(){ var days = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat'] var today = new Date() var msg = ...
- CSS之fontAwesome代替网页icon小图标
引言 奥森图标(Font Awesome)提供丰富的矢量字体图标—通过CSS可以任意控制所有图标的大小 ,颜色,阴影. 网页小图标到处可见,如果一个网页都是干巴巴的文字和图片,而没有小图标,会显得非常 ...
- HTML 简单归纳 -- 前端知识
web前端 Internet:是一个全球性的计算机互联网络,中文名称“因特网”.“国际互联网”.“网际网”等等: Internet提供的服务:http.ftp.Telnet.email.www.bbs ...
- 纯css实现元素下出现横线动画(background-image)
效果图: html: <div class='site_bar'>首页</div> css: .site_bar{ background-image : linear-grad ...