using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using XKRS.Common.Interface; namespace XKRS.UI.Model.Winform.Helper { public static class MenuFormFactory { public static Dictionary menuFrmTypeDict = null; public static Dictionary MenuFrmTypeDict { get { if (menuFrmTypeDict == null) { var assm = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory) .GetFiles("*.dll") .Where(fi => { return fi.Name.StartsWith("XKRS"); }) .Select(u => { try { return Assembly.LoadFrom(u.FullName); } catch { } return null; }) .Where(a => a != null) .ToList(); assm.AddRange(AppDomain.CurrentDomain.GetAssemblies()); assm = assm.Distinct().ToList(); try { menuFrmTypeDict = assm.SelectMany(a => a.GetTypes()) .Where(t => { if (t.GetInterfaces().Contains(typeof(IMenuNode))) { var attr = t.GetCustomAttribute(); return attr != null; } else { return false; } }).ToDictionary(t => t.GetCustomAttribute(), t => t); } catch(Exception ex) { throw ex; } } return menuFrmTypeDict; } } /// /// 从Menu配置项转为窗口 /// /// /// public static MenuFormBase GetMenuFrm(string frmCode) { Type frmType = GetMenuFrmType(frmCode); if (frmType == null) { return null; } var menuItem = Activator.CreateInstance(frmType); if (menuItem == null) { return null; } var menu = menuItem as MenuFormBase; if (menu == null) { return null; } menu.Tag = frmCode; return menu; } public static Type GetMenuFrmType(string frmCode) { Type frmType = null; foreach (KeyValuePair pair in MenuFrmTypeDict) { if (pair.Key.MenuCode == frmCode) { frmType = pair.Value; break; } } return frmType; } } }