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
Activator.CreateInstance(type)
返回一个object
。
instances.Add()
想要一个ISomeInterface
。
所以你需要强制转换它
instances.Add((ISomeInterface)Activator.CreateInstance(type));
你有一个强类型列表,但是CreateInstance
方法返回对象,所以你需要对它进行强制类型转换
instances.Add((ISomeInterface)Activator.CreateInstance(type));