C# - 在运行时期间创建在dll中找到的对象的实例

时间:2014-05-04 23:58:43

标签: c#

我的代码存在问题,无法解决问题所在。

目标是搜索实现接口的一些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

2 个答案:

答案 0 :(得分:4)

Activator.CreateInstance(type)会返回object

instances.Add()需要ISomeInterface

所以你需要施展它。

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

答案 1 :(得分:4)

您有一个强类型列表,但CreateInstance方法返回对象,因此您需要将其强制转换

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