Beispiel #1
0
        private PluginManager(Type pluginType, object[] args)
        {
            plugins         = new Dictionary <string, Plugin>();
            this.pluginType = pluginType;

            ctorArgTypes = new Type[args.Length];
            ctorArgs     = args;

            for (int i = 0; i < ctorArgs.Length; i++)
            {
                ctorArgTypes[i] = ctorArgs[i].GetType();
            }

            // find system-wide plugins
            string systemPluginDir = FileResourcePath.GetBinPath();

            string[]    systemPluginFiles = Directory.GetFiles(systemPluginDir);
            CompareInfo compare           = CultureInfo.InvariantCulture.CompareInfo;

            foreach (string file in systemPluginFiles)
            {
                if (compare.IndexOf(file, "plugin", CompareOptions.IgnoreCase) >= 0 &&
                    file.EndsWith(".dll"))
                {
                    //Console.WriteLine("Searching File {0}", file);
                    AddPluginFile(file);
                }
            }

            try {
                // find local user plugins
                string   userPluginDir   = FileResourcePath.GetUserPath("plugins");
                string[] userPluginFiles = Directory.GetFiles(userPluginDir);

                foreach (string file in userPluginFiles)
                {
                    if (compare.IndexOf(file, "plugin", CompareOptions.IgnoreCase) >= 0 &&
                        file.EndsWith(".dll"))
                    {
                        //Console.WriteLine("Searching File {0}", file);
                        AddPluginFile(file);
                    }
                }
            }
            catch (IOException e) {
                System.Console.WriteLine("Failed to open plugins directory: " + e.Message);
            }
        }