基於ASP.NET MVC的熱插拔模塊式開發框架(OrchardNoCMS)--模塊開發


之前文章中給大家說明了下我這個小小的想法,發現還是有不少人的支持和關注。你們的鼓勵是對我最大的支持。

我總結了了大家的評論,有以下幾個問題:

1.希望有更多的文檔說明。

2.希望介紹下Orchard的熱插拔機制。

3.希望可以說明如何擴展功能什么的。

4.介紹下Orchard的核心機制。

5. 介紹下我對Orchard的整個瘦身過程怎么做的。

6.覺得這個像瑞星殺毒只剩下小獅子了(這個有意思 J)

除了這些還有別的,我只是自己大概總結了下。

對於以上的問題,我不會挨個去說明。只是給大家說明下我的整個計划和接下來的安排。

首先,文檔是必須的。可能在博客上未來不會有太多的文檔,但是在github上你將會找到很多的說明文檔。OrchardCMS的整個運作機制,確實是很龐大,很復雜的。對於大家都關注和好奇的熱插拔,我不可能一下子就去介紹說明它,因為它依賴於Orchard CMS的其他好多功能和機制。比如:Shell的概念,Feature的加載機制,緩存機制,動態代理、HttpContent管理等。還有一些協調的方法類等。

從我接觸OrchardCMS開始到現在也有兩年了。開始試着去讀它的源碼,有點不靠譜,或者說對能力的要求比較高。所以試着從模塊開發為出發點,慢慢的滲透,理解才是比較適合我們大多數人的方法。

所以還是從比較簡單的模塊開發來,中間會順帶的介紹一些OrchardCMS中的比較核心的內容。

1. 創建一個模塊:

我保留了代碼生成模塊,不能通過手動創建模塊,那樣會瘋掉的。所以首先需要去Tools文件夾下的Orchard/bin下把Orchard.exe拷貝到Web站點的bin目錄下。

clip_image002

然后打開它,建議使用Powershell打開,容易粘貼復制。

使用codegen module Orchard.Car來生成一個Orchard.Car模塊。

clip_image004

如果你使用過改模塊,那么忽略這一節,往下看吧。

image

打開解決方案,在Modules文件夾下,右鍵選擇‘添加’菜單,找到Orchard.Web文件夾下的Modules文件夾,選擇剛才生成好的Orchard.Car。

image

添加完成后,我們就創建好了Orchard.Car模塊。

2. 修改module.txt文件。

對於一個模塊,這里需要理解什么是模塊邊界,就是這個模塊能夠放到容器里的所有觸頭。

OrchardNoCMS中一個模塊的觸頭有以下幾個:

image

也就是該模塊必須有的部分。所以我們需要修改Module.txt文件,來確定模塊以來的OrchardNoCMS版本號,以及模塊的版本號。修改后的文檔如下:

image

3. 創建Car的實體和關系映射。

現在我們需要的是車輛這個實體,包含名稱、描述、價格、品牌、座位數幾個屬性。

對應的實體和數據庫中表的關系映射,OrchardNoCMS會自己來完成。所以我們只是定義實體。

這里說明下Orchard是如何來找到需要創建映射關系的實體類。

首先需要關注的是CompositionStrategy 這個類。

image

看看它都干了什么。J。它通過找到命名空間以.Models結束的並且包含屬性有Id這個字段的類作為需要創建mapping的實體。然后通過創建RecordBlueprint來告訴NHibernate你應該讓哪個類映射到哪張表。

但是默認這里有很大的局限性。

比如:我的主鍵不想叫Id,我想叫tablename+Id,那怎么辦呢?我的表名比較特殊,不能和類同名怎么辦?不着急,后面會說明。

最終的實體關系映射會存放到APPData /site下某處,名字叫mapping.bin,你可以自己去找找看。

4. 創建Service

有了實體,接下來需要做的是創建一個Service。注意,如果你使用OrchardCMS,那么可以看到里面的數據庫操作大都離不開內容管理。這里則直接是使用IRepository進行數據庫操作。所以我們需要創建一個ICarInfoService接口,並實現它。

image

上圖中圈住的IDependency這個 接口,是所有需要自動注入到Autofac容器的接口都需要繼承的。

這里就需要說明一下Orchard的底層自動注入機制。看ShellContainerFactory.cs中的代碼來完成所有的自動注入功能,同時它還結合Castle.DynamicProxy實現了AOP功能。所以大致來說,大部分的面向對象牛X的框架都離不開IoC和它上面的AOP。

image

對於不同的注入方式和AOP在別的文章里介紹吧。

5. 創建Controller和View

創建好實體后,我們創建一個新增記錄的Action。

image

創建好對應的View,需要注意的是,這里Views文件夾下的子文件夾需要自己手動創建。

image

Index.cshtml為空,先不創建。本人的css不是很好,所以隨便寫了幾個div。

6. 創建路由

如果不創建路由,也可以通過Orchard.car/Car/Add來訪問上面創建的Action,但是我們為了簡單,可以自己定義路由,所有自定義的路由都需要實現IRouteProvider這個接口。

image

現在就可以通過car/add來訪問上面定義好的Action啦。

7. 創建數據庫表

使用Orchard提供的DataMigration來創建表。方法如下:

image

8. 啟用模塊。

在剛才打開的orchard.exe中執行如下命令: feature enable orchard.car

clip_image028

以上完成模塊的開發。

以上只是理想的狀態。現實總是有很多變態的需求。也希望大家提出自己的問題。

待續。。。。。。。。。。。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM