首先講一下概念,此驅動非彼驅動。在Agle.Net中咱們將組件規劃成兩種類型,一種是基於業務的窗體組件,一種是提供擴展功能的驅動組件。html
打個比方例如通常系統中須要提供身份證讀卡功能,然而市面上有不少種身份證讀卡器,咱們沒法約束客戶都是用同一種讀卡器,爲了擴展性咱們將身份證讀卡功能封裝爲驅動組件。git
那麼是用不一樣的身份證讀卡器設備,咱們提供相應的封裝實現就能夠了。下面我來演示一個簡單的驅動型組件開發例程。數據庫
Agile.Net開發管理平臺項目,已經託管在開源中國碼雲平臺(http://git.oschina.net)框架
登錄碼雲平臺進入項目主頁(http://git.oschina.net/MuAgile/AgileDevelop)便可瀏覽下載源代碼。ide
1.開發環境搭建工具
軟件安裝請參考文章《Agile.Net 組件式開發平臺 - 開發環境部署》學習
下載項目【AgileDevelop】->【附件】中的數據庫備份文件,恢復數據庫到SqlServer,建議數據庫命名"Agile"。ui
2.獲取項目源代碼this
1. 啓動 Microsoft Visual Studio,進入菜單項【工具】->【選項】->【源代碼管理】-> 設置選項【當前源代碼管理插件】下拉框中選擇【Microsoft Git 提供程序】。 spa
2. VS切換到團隊資源管理器界面,進入菜單項【項目】->【鏈接到團隊項目】。
3. 在本地Git存儲庫欄目中,輸入Git項目地址,克隆"AgileDevelop"項目。
4. 關於Git的源代碼管理系統的使用方法,請參考相關文檔學習。
3.建立第一個驅動
1. 新建一個類庫命名爲"Driver.IDCard",框架版本爲Net4.0,引用 Agile.Cord.dll , Agile.Entity.dll 等平臺SDK庫文件。
2. 新增一個驅動類,繼承【Agile.Core.Addin.PluginDriverBase】驅動基類並重寫"OnOpen"、"OnClose" 方法。
3. 添加【PluginAttribute】標籤,添加組件描述。
namespace Driver.IDCard { [PluginAttribute("69715891-FBA5-428A-94B1-5C6D5C28926F", "身份證閱讀驅動", "華視二代身份證讀卡器閱讀驅動")] public class Driver : Agile.Core.Addin.PluginDriverBase { private bool _IsOpen; /// <summary> /// 調用驅動組件並執行方法 /// </summary> /// <param name="args">參數</param> /// <returns></returns> protected override object OnOpen(object args) {
try
{
this.Init();
frmCard frm = new frmCard();
if (frm.ShowDialog() == DialogResult.OK)
return frm.IDCard.ToClone(); else
return null;
}
catch (Exception ex)
{
throw ex;
}
finally
{
this.OnClose();
} } /// <summary> /// 關閉(卸載)驅動組件 /// </summary> /// <returns></returns> protected override void OnClose() { try
{
SDK.CVR_CloseComm();
} catch { } } /// <summary> /// 初始化設備鏈接 /// </summary> /// <returns></returns> private void Init() {
if (_IsOpen == false)
{
int ret = -1;
for (int port = 1001; port <= 1016; port++)
{
ret = SDK.CVR_InitComm(port); if (ret == 1) break;
}
if (ret != 1)
{
for (int port = 1; port <= 4; port++)
{
ret = SDK.CVR_InitComm(port);
if (ret == 1) break;
}
}
if (ret == 1)
{
_IsOpen = true;
return;
}
else if (ret == 0)
throw new Exception("讀卡器鏈接失敗!動態庫加載異常。");
else if (ret == 2)
throw new Exception("讀卡器鏈接失敗!端口開啓異常。");
else
throw new Exception("讀卡器鏈接失敗!發生未知異常。");
} } } }
4.至此一個簡單的平臺驅動組件已經開發完成了,下面我們來調用試試看。
private void btn_NoneCard_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e) { //經過如下四種方式調用驅動組件 //方式一 //var driver = Controller.GetIPlugin(Guid.Parse("69715891-FBA5-428A-94B1-5C6D5C28926F")) as IPluginDriver; //方式二 //var driver = Controller.GetIPlugin("Driver.NoneCard.dll", "Driver.NoneCard.Driver", "Drivers") as IPluginDri //方式三 //var driver = Agile.Library.Controller.GetIPlugin("Driver.NoneCard.Driver.Driver") as IPluginDriver; //方式四 var driver = Agile.Library.Controller.GetIPlugin<Driver.IDCard.Driver>() as IPluginDriver; IDCard entity = driver.Open(); }
OK 運行成功,那麼我們第一個驅動組件【身份證閱讀驅動】已經開發好了,Agile.Net開發管理平臺中包含本案例完整源代碼。