我的代码存在问题,无法解决问题所在。
目标是搜索实现接口的一些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
答案 0 :(得分:4)
Activator.CreateInstance(type)
会返回object
。
instances.Add()
需要ISomeInterface
。
所以你需要施展它。
instances.Add((ISomeInterface)Activator.CreateInstance(type));
答案 1 :(得分:4)
您有一个强类型列表,但CreateInstance
方法返回对象,因此您需要将其强制转换
instances.Add((ISomeInterface)Activator.CreateInstance(type));