| |
|
![]() |
vbs/VBScript DOS/BAT hta htc python perl 游戏相关 VBA 远程脚本 ColdFusion ruby专题 autoit seraphzone PowerShell linux shell Lua Golang Erlang 其它教程 CSS/HTML/Xhtml html5 CSS XML/XSLT Dreamweaver教程 经验交流 |
-> 领域驱动设计 -> [Architect] Abp 框架原理解析(1) Module -> 正文阅读 |
[领域驱动设计][Architect] Abp 框架原理解析(1) Module |
本节目录 Abp介绍 Abp源码分析 代码实现 Abp介绍 学习了一段时间的Abp,领略了一下前辈的架构.总结还是SOLID,降低耦合性. 虽然从架构上说甚至不依赖于DI框架,但实际上在基础框架中还是有一定的必须依赖Castle Windsor. Abp依靠IOC和AOP实现了大量的自动化. 其中Module设计,是Abp的核心. Abp源码分析 Abp的入口:AbpBootstrapper.Initialize() 此方法中做了各种配置的注册及初始化. 最重要的是AbpModuleManager的初始化. ![]() 在这个初始化代码中 先查询出所有的module,根据依赖关系排序后.并保证AbpKernelModule为第一. 然后初始化module,所有module依次调用PreInitialize、Initialize、PostInitialize ![]() 代码实现 定义AbpModule public class AbpModule { public virtual void PreInitialize() { } public virtual void Initialize() { } public virtual void PostInitialize() { } } 定义2个module public class ApplicationModule : AbpModule { public override void PreInitialize() { Console.WriteLine("ApplicationModule's PreInitialize is called"); } public override void Initialize() { Console.WriteLine("ApplicationModule's Initialize is called"); } public override void PostInitialize() { Console.WriteLine("ApplicationModule's PostInitialize is called"); } } public class CoreModule : AbpModule { public override void PreInitialize() { Console.WriteLine("CoreModule's PreInitialize is called"); } public override void Initialize() { Console.WriteLine("CoreModule's Initialize is called"); } public override void PostInitialize() { Console.WriteLine("CoreModule's PostInitialize is called"); } } 定义IoCManager public class IocManager { public static IocManager Instance { get; private set; } public IWindsorContainer IocContainer { get; private set; } static IocManager() { Instance = new IocManager(); } public IocManager() { IocContainer = new WindsorContainer(); //Register self! IocContainer.Register( Component.For<IocManager>().UsingFactoryMethod(() => this) ); } } 实现AbpBootstrapper public class AbpBootstrapper { public IocManager IocManager { get; private set; } public AbpBootstrapper() { IocManager = IocManager.Instance; } public virtual void Initialize() { InitializeModules(); } private void InitializeModules() { var types = Assembly.GetExecutingAssembly().GetTypes(); var moduleTypes = new List<Type>(); var modules = new List<AbpModule>(); foreach (var type in types) { if (typeof(AbpModule).IsAssignableFrom(type)) { moduleTypes.Add(type); IocManager.IocContainer.Register(Component.For(type)); } } foreach (var module in moduleTypes) { var obj = IocManager.IocContainer.Resolve(module) as AbpModule; modules.Add(obj); } modules.ForEach(x => x.PreInitialize()); modules.ForEach(x => x.Initialize()); modules.ForEach(x => x.PostInitialize()); } } 执行 class Program { static void Main(string[] args) { var booter = new AbpBootstrapper(); booter.Initialize(); Console.ReadKey(); } } Abp原理如上,只是在本例中并未做dependency排序处理. 在Abp中的排序依赖ListExtensions类对List的扩展方法实现的. 本文地址:http://neverc.cnblogs.com/p/5249103.html |
领域驱动设计 最新文章 |
领域驱动设计的基础知识总结 |
海西 · 云交付 DevOps实践落地方案 |
多服务器终端交互利器 |
《静儿的服务治理私房菜》服务治理和架构 |
服务治理概述 |
美团.点评服务治理框架 |
ASP.NET Zero |
1.领域驱动简介.2.领域.子域.限界上下文.3. |
东麓庄园系统开发 |
东麓庄园系统开发 |
上一篇文章 下一篇文章 查看所有文章 |
|
360图书馆
软件开发资料
购物精选
新闻资讯
Chinese Culture
三丰软件
开发
中国文化
阅读网
日历
万年历
2019年12日历 2019-12-8 8:57:38 |
|
网站联系: qq:121756557 email:121756557@qq.com 编程知识 |