首页 新闻 搜索 专区 学院

反射和泛型共用,反射出的是泛型。

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-10 22:37

Assembly.Load(“Poetry.Model”).CreateInstance("Poetry.Model.BaseService<admin>");

这句话,生成的实力是BaseService,这个泛型请问,有谁碰到过吗?
Assembly.Load(“Poetry.Model”).CreateInstance("Poetry.Model.admin")

如果不是泛型的话,是可以的,关键我现在想反射出泛型,也就是这个下面这个类?请问有什么方法吗?

问题补充:

public class DALFactory<T> where T : class, new()
{

    public static readonly string DALPath =           System.Configuration.ConfigurationManager.AppSettings["DALPath"];
    public static readonly string DALHZ =     System.Configuration.ConfigurationManager.AppSettings["HZ"];
  public static object CreateDAL(string assemblyPath, string objType)
  {
    object cacheDao = DALCache.GetDao(objType);
    if (cacheDao == null)
    {
      cacheDao =  Assembly.Load(assemblyPath).CreateInstance("Poetry.Model.命名空间下的泛型。怎么弄啊!");

      DALCache.InsertDaoCache(objType, cacheDao);
    }
  return cacheDao;
  }
}

rains的主页 rains | 小虾三级 | 园豆:860
提问于:2012-07-10 20:01
< >
分享
最佳答案
1

既然用泛型了,为什么不直接new T():

cacheDao = new T();

如果一定要用CreateInstance,那就这样:

Assembly.Load(assemblyPath).CreateInstance(typeof(T).Name);

收获园豆:5
dudu | 高人七级 |园豆:37791 | 2012-07-10 21:40

我就那写过了,但是还是不行啊。能帮我看下源码吗?

rains | 园豆:860 (小虾三级) | 2012-07-10 21:48

@Waters: 报什么错误?

dudu | 园豆:37791 (高人七级) | 2012-07-10 21:49

@Waters: BaseService<T>应该实现IExpandDAL<T>接口:

public class BaseService<T> : IExpandDAL<T> where T : class, new()

你在GetCustomerDao中进行的操作是: as IExpandDAL<T>;

dudu | 园豆:37791 (高人七级) | 2012-07-10 22:34
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册