日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ABP入门系列(15)——创建微信公众号模块

發布時間:2023/12/10 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABP入门系列(15)——创建微信公众号模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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包,點擊確定安裝即可。

安裝Abp需要依賴安裝的Nuget包

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包。

安裝Abp.Web.Api需要依賴安裝的Nuget包

那怎樣指定依賴呢,只需要通過[DependsOn]特性指定即可。

?

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

好了,一個微信公眾號模塊的基礎項目框架搭好了,是不是很簡單!

到這一步,你可能會問,你這只是簡單創建微信公眾號模塊,但如何與我們Demo進行集成交互呢?

對的,是只簡單創建了微信模塊,但這一節我不打算講如何與Demo進行集成交互。因為在介紹如何通過webapi與系統交互之前,梳理下Abp模塊化的設計,更能幫助我們了解模塊化設計思想。

下面我們就簡單梳理下ABP模塊化的設計。

3. ABP模塊化設計

說到模塊,突然想到幾個單詞考考大家,model、modal、module分別是什么意思?
不知道的就自行查詞典吧。

下面回歸正題。

3.1. 模塊化相關類型

先來看看模塊相關類型依賴圖:

Module相關類型依賴圖

從類型依賴圖中可以看出設計的并不復雜:

  • 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_Start和Application_End虛方法。
Application_Start方法中調用了AbpBootstrapper.Initialize()方法。相當于AbpBootstrapper.Create<TStartupModule>().Initialize();

代碼是不是看累了,上圖,咱們直接來看web項目啟動時Module動態加載的調用堆棧。

Module動態加載的調用堆棧

是不是一目了然,總結以下:

Abp在啟動項目時根據指定的啟動模塊(StartupModule)首先加載該模塊,然后再去檢查該模塊的自定義特性是否定義有[DependsOn]特性,若有則按序加載所有依賴的模塊,也就是鏈式動態依賴加載。然后再依次調用Module的PreInitialize,Initialize和PostInitialize以完成初始化。

好了模塊的啟動加載就講到這里,感興趣的還是建議大家直接看看源碼。
這里推薦一篇文章ABP源碼分析三:ABP Module,來幫助大家理解Abp的模塊化思想。

4. 總結

這一節有點標題黨的味道,但內容也算點題了。下一篇我將介紹微信公眾號模塊如何通過WebApi與系統進行交互,盡情期待。



作者:圣杰
鏈接:https://www.jianshu.com/p/1e6efd9be629
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的ABP入门系列(15)——创建微信公众号模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 午夜网站在线观看 | 国产视频一区二区三区四区 | 一本大道综合伊人精品热热 | 综合网视频 | 欧美三级视频在线 | 国产精品三级 | 色婷婷麻豆 | 日本少妇aaa | 国语久久 | 自拍偷拍激情视频 | 制服丝袜第二页 | 日韩一区二区三区在线免费观看 | 老头糟蹋新婚少妇系列小说 | 欧美日韩国产综合网 | 亚洲黄色av | 久久久久久人妻一区二区三区 | 日本黄色性视频 | 男生和女生靠逼视频 | 亚洲人人在线 | 国产黄色在线网站 | 致单身男女免费观看完整版 | 亚洲自拍偷拍图 | 亚洲精品美女久久久 | 成人一区二区av | 豆国产97在线 | 亚洲 | 中文天堂在线资源 | 亚洲天堂视频在线观看 | 日本美女性生活视频 | 日韩成人av网站 | 性色av一区二区三区红粉影视 | 免费一级网站 | 色综合99久久久无码国产精品 | 中文字幕在线观看视频网站 | 免费久草视频 | 天堂影视在线观看 | av成人在线观看 | 午夜久久一区 | 成年人黄国产 | 99草视频 | 欧美一区二区福利视频 | 成人免费无码大片a毛片抽搐色欲 | 亚洲精品视频大全 | 亚洲精品一区二区三区新线路 | 黄色九九 | 天堂婷婷| fc2ppv色の美マンに中出し | 欧美99久久精品乱码影视 | 人人综合| 五月天视频网 | 男女午夜影院 | 一级性生活毛片 | 亚洲天堂男人av | 一本到视频 | 一级肉体全黄毛片 | 亚洲精品www | 国产午夜不卡 | 午夜视频在线免费观看 | 久久久久久影视 | 天堂视频网 | 日本无遮挡边做边爱边摸 | aaa午夜| 日韩av免费一区 | 好吊妞这里有精品 | 亚洲天堂av中文字幕 | 中国videosex高潮hd | 精品无码久久久久久久久果冻 | 精品自拍视频在线观看 | 捆绑无遮挡打光屁股 | 自拍偷拍五月天 | 色噜噜狠狠一区二区三区果冻 | 女女h百合无遮涩涩漫画软件 | 91视频免费在观看 | jizz18欧美18| 黄色一级a毛片 | 久久影视av | 久久久久久亚洲精品中文字幕 | 日日噜噜夜夜狠狠久久波多野 | 乱亲女h秽乱长久久久 | 第一章婶婶的性事 | 91成人入口 | 欧美精品一线 | 国产一级免费大片 | 久久久久久久久久一区 | 国产精品69毛片高清亚洲 | 免费中文字幕日韩 | a在线免费观看 | 久久伊人成人 | 黄色a级片网站 | 国产91视频在线 | 国产日韩欧美精品一区二区 | 青青草视频免费观看 | 亚洲激情在线 | 日本精品在线观看视频 | 久草在| 99成人国产精品视频 | 免费荫蒂添的好舒服视频 | 国产免费一区二区三区最新不卡 | 欧美日韩国产第一页 | 午夜在线播放 |