示例#1
0
        public AddInController(IXExtension ext)
        {
            AppDomain.CurrentDomain.ResolveBindingRedirects(new LocalAppConfigBindingRedirectReferenceResolver());

            m_HostModule = new AddInHostModule(ext);

            m_Ext = ext;

            var cmdGrp = ext.CommandManager.AddCommandGroup <CadPlusCommands_e>();

            cmdGrp.CommandClick += OnCommandClick;

            var modulesDir = Path.Combine(Path.GetDirectoryName(this.GetType().Assembly.Location), "Modules");

            var catalog = CreateDirectoryCatalog(modulesDir, "*.Module.dll");

            var container = new CompositionContainer(catalog);

            container.SatisfyImportsOnce(this);

            if (m_Modules?.Any() == true)
            {
                foreach (var module in m_Modules)
                {
                    module.Load(ext);
                }
            }
        }
示例#2
0
        protected override void OnStartup(StartupEventArgs e)
        {
            this.DispatcherUnhandledException          += OnDispatcherUnhandledException;
            AppDomain.CurrentDomain.UnhandledException += OnDomainUnhandledException;

            OnAppStart();

            var parserOutput = new StringBuilder();

            TCliArgs args;
            bool     hasArgs;
            bool     hasError;

            using (var outputWriter = new StringWriter(parserOutput))
            {
                var parser = new Parser(p =>
                {
                    p.CaseInsensitiveEnumValues = true;
                    p.AutoHelp               = true;
                    p.EnableDashDash         = true;
                    p.HelpWriter             = outputWriter;
                    p.IgnoreUnknownArguments = false;
                });

                TryExtractCliArguments(parser, e.Args, out args, out hasArgs, out hasError);
            }

            if (hasArgs)
            {
                //WindowsApi.AttachConsole(-1);
                ConsoleHandler.Attach();

                SynchronizationContext.SetSynchronizationContext(new SynchronizationContext());
                m_HostModule = new ConsoleHostModule();

                var res = false;

                if (!hasError)
                {
                    try
                    {
                        RunConsole(args)
                        .ConfigureAwait(false)
                        .GetAwaiter()
                        .GetResult();
                        res = true;
                    }
                    catch (Exception ex)
                    {
                        //TODO: message exception
                        PrintError(ex.Message);
                    }
                }
                else
                {
                    Console.Write(parserOutput.ToString());
                }

                Environment.Exit(res ? 0 : 1);
            }
            else
            {
                m_HostModule = new WpfAppHostModule(this);
                base.OnStartup(e);
            }
        }