葡京娱乐场注册狐言乱语•耳中人

ABP入门系列目录——学习Abp框架的实操演练
源码路径:Github-LearningMpaAbp

其一故事是来在上世纪八十年代末的事,那段时光全国上下流行练气功,各种各样的气功层出不穷。


一如既往开始气功是用来强身健体的,后来尽管应运而生了能够治病的了,再后来就演变成特异功能、包治百病的气功了,甚至于什么用气功做手术啊、用气功让水变成油啊等等更是不胜枚举,全国上下可以说凡是同等切开多魔乱舞。

1. 引言

现底互联网就无以单独局限为网页应用,IOS、Android、平板、智能家居等楼台正如火如荼的高速提高,移动采用的求呢破天荒旺盛。所有的互联网商家还无思量去这无异于差走浪潮,布局移动市场分一客移动红利。
的确,智能手机作为咱们日常生活已必不可少的等同部分,通过手机app能够取得更好之心得,比如应酬、购物、娱乐、生活。

但是随即吗引入了一个题材,如果布局移动市场,就代表要保障好几久活线,比如网页、Android、IOS、微信公众号当。这对店家来说的确是一样起十分的投入。
产品对于用户来说,用户只有关心体验。
倘于开发者来说,开发者重新关爱于担保业务流程及数量的不利流转下,如何对产品线进展集成,来避免开还工作。

如果刚刚ABP框架就曾经帮咱解决了当下同一问题,Abp是根据【模块化设计思想】构建的,开发人员可以以于定义之机能以模块(module)的款式集成到ABP中。
今非昔比之模块通过组建就可以构成一个初的功能。

那若早晚大怪怎玩转Abp模块,下面我们即便盖我们的Demo为例,来进行微信公众号模块的付出。

那时候我正要上小学,我出相同涉及特别好之同校让顾宇,我家跟他家离得特别近,我俩天天一样块上下学,放学吃了米饭一样片玩。

2. 开立微信公众号模块

概念一个模块很粗略,只需要创建微信项目,然后定义WeixinModule类继承自AbpModule即可,再然后为WeixinModule定义[DependsOn]特性指定依赖之模块即可。

顾宇他爸当咱们县里纺织厂上班,一米八差不多之高挑,膀大腰圆,所以那时候顾宇以我们那同样切片没有人敢于惹,谁都心惊胆战他父亲,我那么时候呢特地羡慕顾老伯,常怀想方我长大了也使长大顾叔叔这样,多帅气,多厉害!

2.1. 创建微信公众号路

新建mvc项目,命名项目名为吧LearningMpaAbp.Weixin。因为只要采取及Abp定义之模块功能,首先要安装Abp
Nuget包,选择后会唤起用坐下Nuget包,点击确定安装即可。

葡京娱乐场注册 1

可是及时顾老伯来一个症,爱从麻将,一下班事先不回家,先到纺织厂家属院找同事从麻将,有时候打得晚了顾宇他妈妈还吃顾宇去喝客爸回家用。

2.2. 定义微信公众模块

新建LearningMpaAbpWeixinModule继承自AbpModule。代码如下:

public class LearningMpaAbpWeixinModule:AbpModule
{
    /// <summary>
    /// 预初始化,通常是用来配置框架以及其它模块
    /// </summary>
    public override void PreInitialize()
    {
        base.PreInitialize();
    }

    /// <summary>
    /// 初始化,一般用来依赖注入的注册
    /// </summary>
    public override void Initialize()
    {
        //把当前程序集的特定类或接口注册到依赖注入容器中
        IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
    }

    /// <summary>
    /// 提交初始化,一般用来解析依赖关系
    /// </summary>
    public override void PostInitialize()
    {
        base.PostInitialize();
    }

    /// <summary>
    /// 应用关闭时调用
    /// </summary>
    public override void Shutdown()
    {
        base.Shutdown();
    }
}

自打代码中好观看要概括四独重载方法,每个重载方法负责不同之职责。

顾叔叔打麻将有输有赢倒也未尝为里赔太多钱,所以街坊邻居都懂得他爱打麻将只是为便当是只好,大家为无觉得有什么坏。今天称的之故事便是发生在顾叔叔身上。

2.3. 指定依赖模块

为我们得通过webapi与现有demo进行互动,所以还需要设置Abp.Web.Api
Nuget包。

葡京娱乐场注册 2

这就是说什么样指定依赖吧,只需要通过[DependsOn]特色指定即可。

[DependsOn(typeof(AbpWebApiModule))]
public class LearningMpaAbpWeixinModule:AbpModule
{
    //....
}

好了,一个微信公众号模块的底子项目框架搭好了,是休是充分粗略!

到立刻同样步,你或会见咨询,你顿时只是是粗略创建微信公众号模块,但哪些与我们Demo进行合并交互呢?

对之,是单简单创建了微信模块,但迅即等同节约自我弗打算讲哪些与Demo进行集成交互。因为以介绍如何通过webapi与系统相互之前,梳理下Abp模块化的计划性,更会帮助我们询问模块化设计思想。

下我们即便概括梳理下ABP模块化的统筹。

生一段时间顾叔叔突然开始练气功了,一下班纵打道回府盘腿打坐练气功,打麻将的次数明显滑坡了。

3. ABP模块化设计

说交模块,突然想到几单单词考考大家,model、modal、module分别是啊意思?
匪懂得的就是自行查词典吧。

下面回归正题。

偶我去顾宇家找顾宇玩就可知瞥见,顾叔叔以他家椅子上盘腿因为在,俩手捏在手诀搭在腿上,闭目冥思,一适合高人模样,那时候在我看来显得特别厉害,特别秘密,觉得就就算是的确的气功,气功高人就是如此。

3.1. 模块化相关品种

先行来探模块相关项目因图:

葡京娱乐场注册 3

从今类型因图被好看看设计之并无复杂:

  • AbpModule:所有定义的模块均要继续这抽象类。
  • AbpModuleInfo:可以知晓也AbpModule的正数据,封装AbpModule的着力信息,主要概括Assembly(所属程序集)、Type(类型)、Dependencies(依赖的模块)、IsLoadedAsPlugIn(是否插件模块)。
  • AbpModuleCollection:从类的说明:class AbpModuleCollection : List可知它是一个AbpModuleInfo的汇。
  • AbpModuleManager:模块管理类,主要用来进行模块管理,比如启动关闭模块。
  • DependsOnAttribute:依赖特性,用来表明模块的依项。

竟然的从在后边,顾叔叔练了一段时间气功后,打麻将的水平骤然大幅提高,有时候周末出来打麻将会大胜一上同管不牵动输的,甚至闹同等扭曲给他人怀疑起老千差点打起来。不过跟顾叔叔打麻将之还是街坊邻居和工厂里的勤杂工,输赢的数据也未杀,也未尝从什么风波。

3.2. Abp如何发现并加载模块

Abp中定义了一个起步类AbpBootstraper,该类的任务是启动全套Abp系统,主要担负依赖注入和报模块以供启动。而该类必须以应用程序启动时长被实例化。
若是当Abp生成的沙盘项目,启动项目本来是web应用,所以AbpBootstrapper得在Web项目被于初始化。众所周知,web项目的启航是打Global.asax文件之Application_Start品种上马的。

public class MvcApplication : AbpWebApplication<LearningMpaAbpWebModule>
{
    protected override void Application_Start(object sender, EventArgs e)
    {
        AbpBootstrapper.IocManager.IocContainer.AddFacility<LoggingFacility>(
            f => f.UseAbpLog4Net().WithConfig("log4net.config")
        );

        base.Application_Start(sender, e);
    }
}

我们事先来观下类的表,有没发生察觉什么特别之处?
承的凡泛型基类且指定的泛型为LearningMpaAbpWebModule,指定了一个Module,当前web项目的Moduel。
本着MVC比较熟悉的同校应该理解,MVC应用程序启动类默认是连续自HttpApplication的。从该段代码可以看出,Abp修改了MvcApplication的默认继承类。那自然AbpWebApplication<T>是继往开来自HttpApplication了。废话不多说,来拘禁无异扣现实的概念:

public abstract class AbpWebApplication<TStartupModule> 
: HttpApplication where TStartupModule : AbpModule
{
  /// <summary>
  /// Gets a reference to the <see cref="P:Abp.Web.AbpWebApplication`1.AbpBootstrapper" /> instance.
  /// </summary>
  public static AbpBootstrapper AbpBootstrapper { get; } = AbpBootstrapper.Create<TStartupModule>();

  /// <summary>
  /// This method is called by ASP.NET system on web application's startup.
  /// </summary>
  protected virtual void Application_Start(object sender, EventArgs e)
  {
    ThreadCultureSanitizer.Sanitize();
    AbpWebApplication<TStartupModule>.AbpBootstrapper.Initialize();
  }

  /// <summary>
  /// This method is called by ASP.NET system on web application shutdown.
  /// </summary>
  protected virtual void Application_End(object sender, EventArgs e)
  {
    AbpWebApplication<TStartupModule>.AbpBootstrapper.Dispose();
  }
//省略了部分代码
}

率先映入眼帘的凡基类中定义之AbpBootstraper性,然后视的凡Application_StartApplication_End虚方法。
Application_Start方法被调用了AbpBootstrapper.Initialize()方法。相当于AbpBootstrapper.Create<TStartupModule>().Initialize();

代码是免是圈累了,上图,咱们直接来拘禁web项目启动时Module动态加载的调用堆栈。

葡京娱乐场注册 4

凡未是侦破,总结以下:

Abp在起步项目时因指定的启航模块(StartupModule)首先加载该模块,然后再失反省该模块的自定义特性是否定义有[DependsOn]特色,若发生则按序加载所有乘之模块,也便是链式动态依赖加载。然后再相继调用Module的PreInitialize,Initialize和PostInitialize以成功初始化。

哼了模块的起步加载就称到这边,感兴趣的抑建议大家一直看看源码。
这里推荐一首稿子ABP源码分析三:ABP
Module,来辅助大家知道Abp的模块化思想。

而,大家还以为奇怪,顾叔叔自打练了气功后接近开了上眼似的,打麻将出人意料就成牌王了,有时候私底下嘀咕是无是外练了呀邪功了?不过顾叔叔也没说啊,别人问之差不多矣就是呵呵一笑,牌也无由了转身回家。

4. 总结

当下无异于节约有接触标题党的味道,但内容吧算是点题了。下一致首我以介绍微信公众号模块如何通过WebApi与网进行互,尽情期待。

背后的事就是顾宇告诉自己的了,这么多年我一直认为是顾宇于说谎,但是顾宇信誓旦旦的以及自家保证千真万委是他亲眼看到的,每每想到顾宇描述的画面总是觉得特别好奇。

顾宇是这么说的。有同等龙中午客老爹在家打坐练气功,吞吐吸纳,汇聚神息。

顾宇每天中午若是睡觉午觉,可那天不亮堂怎么了便是在床上数睡非着,于是干脆由床想到客厅喝点次。

顾宇刚准备由卧室走出去,突然听到客厅有个尖尖的动静说:“我得出来了么?”顾宇吓了一跳,以为自己睡的略头晕,就站稳了没动,竖起耳朵仔细听,又闻像是发个小口于讲:“我得出去了么?”顾宇认为这次听清楚了,悄悄扒在门缝往客厅里看。

顾叔叔还当椅子上捧坐在,两手捏手抉,双目紧闭,嘴里念念有词。

顷,顾叔叔说:“可以出了。”这时候就映入眼帘顾叔叔歪着头,从顾叔叔的耳里慢慢钻来一个小丑来,有胳膊有下肢,长的与正常人的身段一样,大概有只六七厘米那么高,仔细一看,这小口脸长的凡面目狰狞,青面獠牙,说不发生之怕吓人。

小人钻出去之后,大大咧咧地跳到了桌子上,走及几上放的包子边上就是大口吃起来了。顾宇都好呆了,手扒在家一动不动,眼睁睁看在这有点好人吃了却了多只包子,又转身去吆喝边放的一个盘中的和,这不够日顾叔叔一直从坐不动,还是冥想的架势,也未尝开眼开眼看看。

即使在这,顾宇突然不清楚啊来了一如既往股子劲,一开门冲在他爸喊:“爸,这是怎么回事,这是单什么事物?”

这会儿再看就小好人明显吓了一跳,在桌子上滴溜乱转,跟见了猫的老鼠一样,一会儿找到个地方一蹦蹦到了椅子上,再往下三蹦两腾下了地,一转眼不见了!

顾叔叔这时候突然和得矣癫痫似的,手脚抽搐从椅子上降低了下去,顾宇这生好得哇一望就哭了,赶紧去里屋喊来了他妈妈,俩人口合力将顾叔叔搀到沙发上躺好,又出门给了医来。

当即周经过遭到,顾叔叔就是眉头紧缩,嘴里不知道说的啊声若细蚊般的念念有词。

新兴,顾叔叔醒了下也是呀一样非晓,顾宇以及他说好看见了一个小怪人,顾叔叔也矢口否认否认,只说好那天中午于打坐练功,突然就暴跌下来什么为无知晓了。

自打那之后,顾叔叔身体便不如前那么好了,有时候还见面骤抽搐着昏迷不醒,顾宇他妈妈一直带在顾叔叔看病吃药,得有一两年看老伯才渐渐地拿病看好。

重复后来,顾叔叔也无练气功了,还是下班了照常去打会儿麻将,还是如之前同一输多赢少,不过打牌的牌友也都是街坊邻居,输赢吗远非多少钱,也便是通常的娱乐。

顾叔叔也再度为未尝犯过病,以前那段岁月要发神助的牌技也再也为不曾出现了。