狐言乱语•耳中人

2. 创微信公众号模块

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

顾叔叔打麻将有输有赢倒也未尝于里赔太多钱,所以街坊邻居都了解他爱打麻将可也即当是独爱,大家为无觉得出啊不好。今天称的这个故事就是是生在顾叔叔身上。

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

想不到的从事在后面,顾叔叔练了一段时间气功后,打麻将的程度骤然大幅提高,有时候周末出来打麻将能够胜一龙一样管非带输的,甚至闹一样掉给人家怀疑起老千差点打起来。不过跟顾叔叔打麻将之都是街坊邻居和工厂里的勤杂工,输赢的数目也未杀,也并未从啊风波。

4. 总结

立马同节发生硌标题党之含意,但情节为好不容易点题了。下一致首我用介绍微信公众号模块如何通过WebApi与系统进行互,尽情期待。

顾叔叔这时候突然跟得矣癫痫似的,手脚抽搐从椅子上下滑了下来,顾宇就下好得哇一名气就哭了,赶紧去里屋喊来了外妈妈,俩人口群策群力把顾叔叔搀到沙发上躺好,又出门被了医来。


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

1. 引言

今昔的互联网已经不在只局限为网页应用,IOS、Android、平板、智能家居等平台正如火如荼的长足提高,移动使用之求也破格旺盛。所有的互联网商家还非思去这无异于次于活动浪潮,布局移动市场分一份移动红利。
诚,智能手机作为咱们日常生活已必不可少的同样片段,通过手机app能够拿走重新好之心得,比如应酬、购物、娱乐、生活。

然随即吗引入了一个题材,如果布局移动市场,就表示要维护好几久活线,比如网页、Android、IOS、微信公众号当。这对企业来说无疑是如出一辙起十分的投入。
产品对于用户来说,用户只有关心体验。
若果对于开发者来说,开发者重新关注于担保业务流程及数的不利流转下,如何对活线拓展集成,来避免开还工作。

倘若恰好ABP框架就早已帮咱缓解了立即同一问题,Abp是冲【模块化设计思想】构建的,开发人员可以拿于定义的效应为模块(module)的花样集成及ABP中。
不同的模块通过组建就可组合一个新的机能。

那你得挺愕然怎玩转Abp模块,下面我们便盖我们的Demo为例,来进行微信公众号模块的支付。

双重后来,顾叔叔也未练气功了,还是下班了照常去打会儿麻将,还是像前一样输多赢少,不过打牌的牌友也还是街坊邻居,输赢呢未尝小钱,也尽管是寻常的娱乐。

2.1. 开立微信公众号项目

新建mvc项目,命名项目名为吧LearningMpaAbp.Weixin。因为要动及Abp定义之模块功能,首先要设置Abp
Nuget包,选择后会提示用盖下Nuget包,点击确定安装即可。

图片 1

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

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动态加载的调用堆栈。

图片 2

举凡无是洞察,总结以下:

Abp在启动项目时根据指定的开行模块(StartupModule)首先加载该模块,然后重新失去反省该模块的自定义特性是否定义有[DependsOn]特征,若发生则以序加载所有乘之模块,也就是链式动态依赖加载。然后重新逐一调用Module的PreInitialize,Initialize和PostInitialize以完成初始化。

好了模块的启动加载就叙到这里,感兴趣的要建议大家一直看看源码。
此推荐一首文章ABP源码分析三:ABP
Module,来辅助大家了解Abp的模块化思想。

发出一段时间顾叔叔突然开练习气功了,一下班即使回家盘腿打坐练气功,打麻将的次数明显回落了。

3.1. 模块化相关品种

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

图片 3

从种类因图被得以视设计之并无复杂:

  • AbpModule:所有定义之模块均要继续这个抽象类。
  • AbpModuleInfo:可以清楚吧AbpModule的长数据,封装AbpModule的着力信息,主要不外乎Assembly(所属程序集)、Type(类型)、Dependencies(依赖之模块)、IsLoadedAsPlugIn(是否插件模块)。
  • AbpModuleCollection:从类的阐发:class AbpModuleCollection : List会它是一个AbpModuleInfo的集。
  • AbpModuleManager:模块管理类,主要用以进行模块管理,比如启动关闭模块。
  • DependsOnAttribute:依赖特性,用来表明模块的负项。

此时还拘留这多少特别人明白吓了一跳,在几上滴溜乱转,跟见了猫的老鼠一样,一会儿找到个地方一蹦蹦到了椅子上,再望生三纵两纵下了地,一转眼不见了!

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();
    }
}

打代码中可以看要概括四只重载方法,每个重载方法负责不同的任务。

顾宇刚准备从卧室走出去,突然听到客厅有只尖尖的音说:“我可出来了么?”顾宇吓了一跳,以为自己睡的稍晕,就站稳了没动,竖起耳朵仔细听,又闻像是来只小口于提:“我好出去了么?”顾宇认为这次听明白了,悄悄扒着门缝往客厅里看。

3. ABP模块化设计

说到模块,突然想到几个单词考考大家,model、modal、module分别是呀意思?
莫清楚之就算机关查词典吧。

下面回归正题。

顾叔叔也再为并未作了患有,以前那段日子要有神助的牌技也重为从来不起了。

2.3. 指定依赖模块

盖咱们要经webapi与现有demo进行互,所以还欲安装Abp.Web.Api
Nuget包。

图片 4

那什么指定依赖吧,只需要经[DependsOn]特点指定即可。

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

吓了,一个微信公众号模块的底蕴项目框架搭好了,是匪是杀简短!

暨及时等同步,你也许会见问,你当时只是略创建微信公众号模块,但什么和我们Demo进行合并交互呢?

针对之,是止简单创建了微信模块,但当下无异于省自我莫打算讲怎么和Demo进行合并交互。因为于介绍如何通过webapi与系统相互之前,梳理下Abp模块化的筹划,更能够协助我们询问模块化设计思想。

脚我们就算大概梳理下ABP模块化的设计。

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

顾宇是这般说的。有相同上中午异大在家打坐练气功,吞吐吸纳,汇聚神息。

偶然自己去顾宇家找顾宇玩就能见,顾叔叔以他家椅子上盘腿因为正,俩手捏在手诀搭在腿上,闭目冥思,一契合高人模样,那时候在我看来显得特别厉害,特别秘密,觉得就便是真的的气功,气功高人就是这般。

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

不一会,顾叔叔说:“可以下了。”这时候就映入眼帘顾叔叔歪着头,从顾叔叔的耳里慢慢钻来一个小人来,有胳膊有下肢,长之和正常人的体形一样,大概有个六七厘米那么大,仔细一看,这多少口脸长的是面目狰狞,青面獠牙,说非出之恐怖吓人。

但立刻顾老伯来一个病症,爱由麻将,一下班预先不回家,先到纺织厂家属院找同事从麻将,有时候打得晚了顾宇他妈妈还为顾宇去喝客父亲回家吃饭。

由那后,顾叔叔身体就是不如前那好了,有时候还会见突然抽搐着昏迷不醒,顾宇他妈妈一直牵动在顾叔叔看病吃药,得有一两年看老伯才慢慢地把病看好。

后来,顾叔叔醒矣后也是什么一样不知道,顾宇以及他说自己看见了一个小怪人,顾叔叔也否认否认,只说自己那天中午在打坐练功,突然就降低下来什么也非晓了。

小人钻出来后,大大咧咧地纵身到了几上,走至桌子上放的馒头边上就大口吃起了。顾宇都吓呆了,手扒着门一动不动,眼睁睁看正在当时有点特别人吃罢了多独馒头,又转身去吆喝边放之一个盘子中的巡,这不够日顾叔叔一直由坐不动,还是冥想的姿势,也尚无开眼开眼看看。

虽于这时候,顾宇突然不掌握呀来了同样抹子劲,一开门冲着他爸喊:“爸,这是怎么回事,这是只什么东西?”

立周经过中,顾叔叔就是眉头紧缩,嘴里不明白说的呀声若细蚊般的念念有词。

顾宇他爸当咱们县里纺织厂上班,一米八大抵底大个,膀大腰圆,所以那时候顾宇在咱们那同样片没有人敢惹,谁都生怕他父亲,我那么时候吗特意羡慕顾老伯,常怀想方自我长大了邪要长大顾叔叔这样,多帅气,多厉害!

无异于开始气功是故来强身健体的,后来虽起了力所能及疗的了,再后来即令演变成特异功能、包治百病的气功了,甚至给什么用气功做手术啊、用气功让水变成油啊之类更是数不胜数,全国上下可以说凡是同样切开多魔乱舞。

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

末尾的事即使是顾宇告诉我的了,这么多年自己一直觉得是顾宇在撒谎,但是顾宇信誓旦旦的及自身包千真万审是外亲眼看到的,每每想到顾宇描述的镜头总是觉得特别稀奇。