コード例 #1
0
ファイル: Program.cs プロジェクト: 2bitpirates/twobit-atlas
        private void ExecutePlugin(IEnumerable<string> args)
        {
            if (String.IsNullOrWhiteSpace(pluginPath))
            {
                throw new ArgumentException("Plugin assembly not specified");
            }

            if (!File.Exists(pluginPath))
            {
                throw new IOException("Plugin assembly not found");
            }

            var factory = new Factory<IPlugin>();

            if (verbose)
            {
                Console.WriteLine("scanning plugin path: {0}", pluginPath);
            }

            try
            {
                factory.ScanAssembly(pluginPath);
            }
            catch (Exception e)
            {
                throw new Exception("Error loading plugin", e);
            }

            if (factory.Count == 0)
            {
                throw new Exception("Assembly does not contain any plugins");
            }

            if (verbose)
            {
                Console.WriteLine("found {0} plugin module(s)", factory.Count);
            }

            IPlugin p = null;

            if (!String.IsNullOrWhiteSpace(pluginName))
            {
                try
                {
                    p = factory.Make(pluginName);
                }
                catch (Exception e)
                {
                    throw new Exception("Error creating plugin: " + pluginName, e);
                }

                if (verbose)
                {
                    Console.WriteLine("using plugin module: {0}", pluginName);
                }
            }
            else
            {
                try
                {
                    p = (IPlugin)factory[0].Make();
                }
                catch (Exception e)
                {
                    throw new Exception("Error creating default plugin: " + factory[0].ToString(), e);
                }

                if (verbose)
                {
                    Console.WriteLine("using plugin module: {0}", Reflect.DisplayName(p));
                }
            }

            if (p != null)
            {
                p.Execute(args);
            }
        }