private void ShowPluginWindow(xBimXplorerPluginWindow PluginWindow) { if (PluginWindow is UserControl) { // preparing user control UserControl uc = PluginWindow as UserControl; uc.HorizontalAlignment = System.Windows.HorizontalAlignment.Stretch; uc.VerticalAlignment = System.Windows.VerticalAlignment.Stretch; //set data binding PluginWindow.BindUI(MainWindow); // add into UI if (PluginWindow.DefaultUIContainer == PluginWindowDefaultUIContainerEnum.LayoutDoc) { // layout document mode LayoutDocument ld = new LayoutDocument(); ld.Title = PluginWindow.WindowTitle; ld.Content = uc; MainDocPane.Children.Add(ld); } else if (PluginWindow.DefaultUIContainer == PluginWindowDefaultUIContainerEnum.LayoutAnchorable) { LayoutAnchorablePaneGroup pg = GetRightPane(); LayoutAnchorablePane lap = new LayoutAnchorablePane(); pg.Children.Add(lap); LayoutAnchorable ld = new LayoutAnchorable(); ld.Title = PluginWindow.WindowTitle; ld.Content = uc; lap.Children.Add(ld); } } }
internal void LoadPlugin(string fullAssemblyName) { Debug.WriteLine(string.Format("Attempting to load: {0}", fullAssemblyName)); if (!File.Exists(fullAssemblyName)) { return; } var ContPath = Path.GetDirectoryName(fullAssemblyName); AssemblyLoadFolder = ContPath; var assembly = Assembly.LoadFile(fullAssemblyName); foreach (var refReq in assembly.GetReferencedAssemblies()) { //check if the assembly is loaded Assembly[] asms = AppDomain.CurrentDomain.GetAssemblies(); bool reqFound = false; foreach (Assembly asm in asms) { AssemblyName asmName = asm.GetName(); if (asmName.FullName.Equals(refReq.FullName)) { reqFound = true; break; } else if (asmName.Name.Equals(refReq.Name)) { Debug.WriteLine(string.Format("Versioning issues: \r\na -> {0} \r\nb -> {1}", refReq.FullName, asmName.FullName)); } } ; if (!reqFound) { Debug.WriteLine(string.Format("Will need to load: {0}", refReq.FullName)); AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve; Assembly.Load(refReq); AppDomain.CurrentDomain.AssemblyResolve -= CurrentDomain_AssemblyResolve; } } var UserControls = assembly.GetTypes().Where(x => x.BaseType == typeof(UserControl)); foreach (var tp in UserControls) { Debug.WriteLine("Looping " + tp.Name); object instance = Activator.CreateInstance(tp); xBimXplorerPluginWindow asPWin = instance as xBimXplorerPluginWindow; if (asPWin != null) { if (!PluginWindows.Contains(asPWin)) { ShowPluginWindow(asPWin); PluginWindows.Add(asPWin); } } } }