Пример #1
0
        protected void LoadAssemblies(HandlePluginFunc pluginCreator, string path)
        {
            string[] dllFileNames = null;

            dllFileNames = Directory.GetFiles(path, "*.dll");
            ICollection <Assembly> assemblies = new List <Assembly>(dllFileNames.Length);

            foreach (string dllFile in dllFileNames)
            {
                AssemblyName an       = AssemblyName.GetAssemblyName(dllFile);
                Assembly     assembly = Assembly.Load(an);
                assemblies.Add(assembly);
            }

            Type pluginType = typeof(T);
            ICollection <LoadedType> pluginTypes = new List <LoadedType>();

            foreach (Assembly assembly in assemblies)
            {
                if (assembly == null)
                {
                    continue;
                }
                Type[] types = assembly.GetTypes();
                foreach (Type type in types)
                {
                    if (type.IsInterface || type.IsAbstract)
                    {
                        continue;
                    }

                    if (type.GetInterface(pluginType.FullName) != null)
                    {
                        pluginTypes.Add(new LoadedType()
                        {
                            t = type, Assembly = assembly.GetName().Name
                        });
                    }
                }
            }

            Plugins = new List <T>(pluginTypes.Count);
            foreach (LoadedType type in pluginTypes)
            {
                Plugins.AddRange(pluginCreator(type.t, type.Assembly));
            }
        }
Пример #2
0
 public PluginLoader(HandlePluginFunc pluginCreator, string path)
 {
     LoadAssemblies(pluginCreator, path);
 }
Пример #3
0
 public PluginLoader(HandlePluginFunc pluginCreator)
 {
     LoadAssemblies(pluginCreator, AssemblyDirectory);
 }