asp.net c#reflection,创建更多实例然后预期

时间:2011-09-28 05:06:07

标签: c# asp.net reflection

我在课堂上有一个帮助方法。它返回所有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

2 个答案:

答案 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));