Пример #1
0
        private void OnRun()
        {
            var file = SelectedModel.Path;

            var assemblyResolveHelper = default(AssemblyResolveHelper);

            try
            {
                assemblyResolveHelper = new AssemblyResolveHelper();

                var assembly = assemblyResolveHelper.Registered(file);

                if (assembly == null)
                {
                    System.Windows.MessageBox.Show("Assembly is resolve fail , please check if the dependencies are missing !");
                    return;
                }

                var type = assembly.GetType(SelectedModel.Name);

                if (type == null)
                {
                    System.Windows.MessageBox.Show(string.Format(" not found {0} type", SelectedModel.Name));
                    return;
                }

                var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.DefaultBinder, new Type[0], null);

                if (ctor == null)
                {
                    System.Windows.MessageBox.Show(string.Format("{0} type not contain empty Constructor", SelectedModel.Name));
                    return;
                }

                var method = type.GetMethod("Execute", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

                if (method == null)
                {
                    System.Windows.MessageBox.Show(string.Format("not found {0} Execute", method.Name));
                    return;
                }

                Messenger.Default.Send(this, "Closed.Token");

                var instance = ctor.Invoke(null);

                method.Invoke(instance, new object[] { null });
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(ex.Message);
            }
            finally
            {
                assemblyResolveHelper?.UnRegistered();
            }
        }
Пример #2
0
        private void loadModel(string path)
        {
            if (string.IsNullOrEmpty(path))
            {
                return;
            }

            var assemblyResolveHelper = default(AssemblyResolveHelper);

            try
            {
                assemblyResolveHelper = new AssemblyResolveHelper();

                var assembly = assemblyResolveHelper.Registered(path);

                if (assembly == null)
                {
                    System.Windows.MessageBox.Show("Assembly is resolve fail , please check if the dependencies are missing !");
                    return;
                }

                var types = assembly.GetTypes().Where(x => x.GetAttribue <AddInAttribute>() != null && x.GetInterface(typeof(ICommand).FullName) != null).ToList();

                if (types.Count == 0)
                {
                    return;
                }

                var addin = Models.FirstOrDefault(x => x.Name == assembly.GetName().Name);

                if (addin != null)
                {
                    Models.Remove(addin);
                }

                var model = new AddInModel()
                {
                    Name = assembly.GetName().Name, Path = path
                };

                foreach (var item in types)
                {
                    model.Childs.Add(new AddInModel()
                    {
                        Name   = item.FullName,
                        Path   = path,
                        Parent = model
                    });
                }

                Models.Add(model);
            }
            finally
            {
                assemblyResolveHelper?.UnRegistered();
            }
        }
Пример #3
0
        private void OnLoad()
        {
            var openFileDialog = new OpenFileDialog
            {
                Title = "请选择要加载的程序集..."
            };

            if (openFileDialog.ShowDialog() == true)
            {
                var file = openFileDialog.FileName;

                var assemblyResolveHelper = default(AssemblyResolveHelper);

                try
                {
                    assemblyResolveHelper = new AssemblyResolveHelper();

                    var assembly = assemblyResolveHelper.Registered(file);

                    if (assembly == null)
                    {
                        System.Windows.MessageBox.Show("Assembly is resolve fail , please check if the dependencies are missing !");
                        return;
                    }

                    var types = assembly.GetTypes().Where(x => x.GetAttribue <AddInAttribute>() != null && x.GetInterface(typeof(ICommand).FullName) != null).ToList();

                    if (types.Count == 0)
                    {
                        return;
                    }

                    var addin = Models.FirstOrDefault(x => x.Name == assembly.GetName().Name);

                    if (addin != null)
                    {
                        Models.Remove(addin);
                    }

                    var model = new AddInModel()
                    {
                        Name = assembly.GetName().Name, Path = file
                    };

                    foreach (var item in types)
                    {
                        model.Childs.Add(new AddInModel()
                        {
                            Name   = item.FullName,
                            Path   = file,
                            Parent = model
                        });
                    }

                    Models.Add(model);
                }
                finally
                {
                    assemblyResolveHelper?.UnRegistered();
                }
            }
        }
Пример #4
0
        private void OnRun()
        {
            const String CFG_ADDIN_DEPS_PATH = "MS_ADDIN_DEPENDENCYPATH";

            var file                  = SelectedModel.Path;
            var cfgAddinDepsPath      = ConfigurationManager.GetVariable(CFG_ADDIN_DEPS_PATH, ConfigurationVariableLevel.User);
            var assemblyResolveHelper = default(AssemblyResolveHelper);

            var libDepsPath = Path.GetDirectoryName(file);

            if (!cfgAddinDepsPath.Contains(libDepsPath))
            {
                ConfigurationManager.DefineVariable(CFG_ADDIN_DEPS_PATH, $"{cfgAddinDepsPath};{libDepsPath}", ConfigurationVariableLevel.User);
            }

            try
            {
                assemblyResolveHelper = new AssemblyResolveHelper();

                var assembly = assemblyResolveHelper.Registered(file);

                if (assembly == null)
                {
                    System.Windows.MessageBox.Show("Assembly is resolve fail , please check if the dependencies are missing !");
                    return;
                }

                var type = assembly.GetType(SelectedModel.Name);

                if (type == null)
                {
                    System.Windows.MessageBox.Show(string.Format(" not found {0} type", SelectedModel.Name));
                    return;
                }

                var ctor = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public, Type.DefaultBinder, new Type[0], null);

                if (ctor == null)
                {
                    System.Windows.MessageBox.Show(string.Format("{0} type not contain empty Constructor", SelectedModel.Name));
                    return;
                }

                var method = type.GetMethod("Execute", BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);

                if (method == null)
                {
                    System.Windows.MessageBox.Show(string.Format("not found {0} Execute", method.Name));
                    return;
                }

                AddinManager.MVVM.Messenger.Default.Send(this, "Closed.Token");

                var instance = ctor.Invoke(null);

                method.Invoke(instance, new object[] { null });
            }
            catch (Exception ex)
            {
                System.Windows.MessageBox.Show(ex.Message);
            }
            finally
            {
                assemblyResolveHelper?.UnRegistered();
            }
        }