我在课堂上有一个帮助方法。它返回所有app域dll中给定接口的所有实例。
public static class Helper
{
public static List<T> GetOfType<T> ()
{
var t = from asm in AppDomain.CurrentDomain.GetAssemblies()
from type in asm.GetTypes()
where !type.IsInterface && !type.IsAbstract && typeof(T).IsAssignableFrom(type)
select (T)Activator.CreateInstance(type);
return t.List();
}
}
编辑
现在说我有界面
IUserContent
{
string URL {get;set;}
}
和一个实现说PhotoContent
public class PhotoContent
{
public string URL {get;set]}
}
现在我说
var c = Helper.GetOfType<IUserContent>();
它给了我9个IUserContent实例,所有实例都指向photocontent
这就是问题所在。 我不明白是什么原因。
有人可以帮忙吗?
此致 成员Parminder
答案 0 :(得分:0)
首先要做的是获取全名:
foreach(var obj in c) {
Console.WriteLine(c.GetType().AssemblyQualifiedName);
}
它为您提供了invovled类型的完整类型名称(包括程序集)。我的 guess 将是在多个汇编或命名空间中意外声明的类型。
答案 1 :(得分:0)
LINQ查询中有两个from
子句。可能是因为这导致结果多次返回?我会尝试使用SelectMany代替:
var t = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(a => a.GetTypes())
.Where(type => !type.IsInterface && !type.IsAbstract && typeof(T).IsAssignableFrom(type))
.Select(type => (T)Activator.CreateInstance(type));