c# -创建运行时在dll's中找到的对象的实例

本文关键字:对象 实例 创建 运行时 dll | 更新日期: 2023-09-27 18:01:33

我的代码有问题,不知道问题在哪里

目的是搜索一些实现接口的dll,然后创建它们的实例。

这是我现在所做的:

List<ISomeInterface> instances = new List<ISomeInterface>();
String startFolder = Path.Combine(Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location), "FolderWithDLLS");
foreach (var f in Directory.EnumerateFiles(startFolder, "*.dll", SearchOption.AllDirectories))
{
         var assembly = Assembly.ReflectionOnlyLoadFrom(f);
         var types = assembly.GetTypes();
         foreach (var type in types)
         {
             if (type.GetInterface("ISomeInterface") != null)
             {
                  //line bellow shows errors about some invalid arguments
                  //default constructor doesn't need any parameters.
                  instances.Add(Activator.CreateInstance(type));
             }
         }
         assembly = null;
}

错误:the best overloaded match for method System.Collections.Generic.List<ISomeInterface>.Add(ISomeInterface) has some invalid arguments

c# -创建运行时在dll's中找到的对象的实例

Activator.CreateInstance(type)返回一个object

instances.Add()想要一个ISomeInterface

所以你需要强制转换它

instances.Add((ISomeInterface)Activator.CreateInstance(type));

你有一个强类型列表,但是CreateInstance方法返回对象,所以你需要对它进行强制类型转换

instances.Add((ISomeInterface)Activator.CreateInstance(type));