插件式(AddIn)架構,不是一個新名詞,應用程序采用插件式拼合,可以更好的支持擴展。很多著名的軟件都采用了插件式的架構,如常見的IDE:Eclipse,Visual Studio,SharpDevelop等等。
這些插件式架構在實現上各有特色,但是基本原理大致相同:
定義插件框架,用來下載,創建,銷毀插件,並管理插件間的通信等等。
定義插件契約,定義統一的接口規范。獲取源碼
private void btLogin_Click(object sender, EventArgs e) { try { string ip = NetworkUtil.GetLocalIP(); string macAddr = HardwareInfoHelper.GetMacAddress(); string loginName = this.cmbzhanhao.Text.Trim(); string identity = WHC.Security.BLL.BLLFactory<WHC.Security.BLL.User>.Instance.VerifyUser(loginName, this.tbPass.Text, Portal.gc.SystemType, ip, macAddr); if (!string.IsNullOrEmpty(identity)) { UserInfo info = WHC.Security.BLL.BLLFactory<WHC.Security.BLL.User>.Instance.GetUserByName(loginName); if (info != null) { #region 獲取用戶的功能列表 List<FunctionInfo> list = WHC.Security.BLL.BLLFactory<WHC.Security.BLL.Function>.Instance.GetFunctionsByUser(info.ID, Portal.gc.SystemType); if (list != null && list.Count > 0) { foreach (FunctionInfo functionInfo in list) { if (!Portal.gc.FunctionDict.ContainsKey(functionInfo.ControlID)) { Portal.gc.FunctionDict.Add(functionInfo.ControlID, functionInfo.ControlID); } } } #endregion bLogin = true; Portal.gc.UserInfo = info; Portal.gc.LoginUserInfo = ConvertToLoginUser(info); this.DialogResult = DialogResult.OK; } } else { MessageDxUtil.ShowTips("用戶帳號密碼不正確"); this.tbPass.Text = ""; //設置密碼為空 } } catch (Exception err) { MessageDxUtil.ShowError(err.Message); } }



