C# Addin如何实现动态加载

   2024-09-30 8820
核心提示:在C#中,要实现动态加载,可以使用反射和动态编译的方法。这里给出一个简单的示例,展示如何使用动态编译的方法来实现插件的动态

在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和反射来完成。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号