如何使用反射动态加载程序集

在C#中,我们可以使用反射Reflection来动态加载程序集。动态加载程序集是一种在运行时根据需要加载程序集的技术,而不是在编译时将其硬编码到应用程序中。
应用场景具体:为应用程序开发自定义插件。在应用程序中,我们可以使用反射来动态加载插件程序集,然后使用插件中的类型。

比如有如下的程序集:

namespace DynamicLoadAndExecute.Library
{
    public class Dog
    {
        public void Speak(string? name)
        {
            System.Console.WriteLine($"Woof... {name}");
        }
    }
}

要动态加载程序集,我们需要使用Assembly类和Type类。

  1. 使用Assembly.Load方法加载程序集。这个方法接受程序集的名称作为参数,并返回一个Assembly对象,表示已加载的程序集。
Assembly assembly = Assembly.Load("DynamicLoadAndExecute.Library");
  1. 使用Assembly.GetType方法获取程序集中的类型。这个方法接受类型的名称作为参数,并返回一个Type对象,表示已加载的类型。
Type type = assembly.GetType("DynamicLoadAndExecute.Library.Dog");
  1. 使用Type.GetMethod方法获取类型中的方法。这个方法接受方法的名称作为参数,并返回一个MethodInfo对象,表示已加载的方法。
MethodInfo methodInfo = type.GetMethod("Speak");
  1. 使用Activator.CreateInstance方法创建对象实例。这个方法接受类型的名称作为参数,并返回一个object对象,表示已创建的对象实例。使用MethodInfo.Invoke调用方法。这个方法接受对象实例和方法参数作为参数,并返回一个object对象,表示方法的返回值。
object? dogInstance = Activator.CreateInstance(type);
methodInfo.Invoke(dogInstance, new object?[] { "Buddy" });
posted @ 2023-08-13 12:43  岩岫先生  阅读(42)  评论(0编辑  收藏  举报