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