阅读量:0
在C#中,要实现动态加载,可以使用反射和动态编译的方法。这里给出一个简单的示例,展示如何使用动态编译的方法来实现插件的动态加载。
- 首先,创建一个插件接口,所有插件需要实现这个接口:
public interface IPlugin { string Name { get; } void Execute(); }
- 创建一个插件库,用于存储所有插件的程序集:
public class PluginLibrary { private Dictionary<string, Assembly> _assemblies = new Dictionary<string, Assembly>(); public void AddAssembly(string assemblyName, Assembly assembly) { _assemblies[assemblyName] = assembly; } public IPlugin GetPlugin(string assemblyName, string className) { if (_assemblies.TryGetValue(assemblyName, out Assembly assembly)) { Type type = assembly.GetType(className); if (type != null && typeof(IPlugin).IsAssignableFrom(type)) { return (IPlugin)Activator.CreateInstance(type); } } return null; } }
- 创建插件实现:
public class PluginA : IPlugin { public string Name => "PluginA"; public void Execute() { Console.WriteLine("PluginA executed."); } }
- 在程序中动态加载插件:
public class Program { public static void Main(string[] args) { PluginLibrary pluginLibrary = new PluginLibrary(); // 加载插件程序集 Assembly assembly = Assembly.LoadFrom("PluginA.dll"); pluginLibrary.AddAssembly("PluginA", assembly); // 获取并执行插件 IPlugin plugin = pluginLibrary.GetPlugin("PluginA", "PluginA"); if (plugin != null) { plugin.Execute(); } else { Console.WriteLine("Plugin not found."); } } }
注意:这个示例中的插件是静态加载的,为了实现动态加载,你需要将插件程序集存储在一个外部文件中(如DLL文件),然后在运行时动态加载它们。这可能需要使用文件I/O和反射来完成。