コード例 #1
0
        private static void FindPlugins()
        {
            LogInfo("Finding Plugins");

            Type pluginType = typeof(Plugin);

            List <Assembly> assemblies = AssemblyUtil.BuildAssemblyList();

            foreach (Assembly assembly in assemblies)
            {
                //LogInfo("Scanning Assembly: " + assembly.GetName().Name);

                foreach (Type type in assembly.GetTypes())
                {
                    if (!type.IsSubclassOf(pluginType))
                    {
                        continue;
                    }

                    try
                    {
                        Plugin plugin = Activator.CreateInstance(type, true) as Plugin;
                        if (plugin == null)
                        {
                            throw new InvalidCastException("Type is not plugin");
                        }

                        if (plugin.GetID() == null)
                        {
                            LogInfo(type.FullName + " is missing Plugin ID!");
                            continue;
                        }

                        if (_plugins.ContainsKey(plugin.GetID()))
                        {
                            continue;
                        }
                        _plugins.Add(plugin.GetID(), plugin);
                    } catch (Exception ex)
                    {
                        string err = ex.Message + "\n" + ex.StackTrace;
                        LogInfo(err);
                        continue;
                    }
                }
            }
        }