C#关于反射创建泛型类
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#关于反射创建泛型类相关的知识,希望对你有一定的参考价值。
Assembly asm= Assembly.Load(AssemblyPath); //通过程序集路径动态加载程序集,该处已经成功加载了程序集。
Type t = asm.GetType("SQLServerBaseDAL.BaseDAL");//程序集的名称为SQLServerDAL,里面有一个类为BaseDAL<T>的泛型类,每次运行到这里,t的值都为null.
Type typeArgument = typeof(T);
Type constructedClass = t.MakeGenericType(typeArgument);
objType = Activator.CreateInstance(constructedClass);
请问大神是什么原因啊?
我的BaseDAL<T>是这样定义的:
namespace SQLServerBaseDAL
public class BaseDAL<T> : IBaseDAL<T> where T : class,new()
.........
你可以先使用
string fullTypeName = typeof(SQLServerBaseDAL.BaseDAL<>).FullName看下fullTypeName是什么,然后再填到asm.GetType的参数里即可
同时你也可以注意到泛型类型的TypeName跟普通的TypeName的区别
参考技术A 编译器压根不会编译BaseDAL<T>,所以你得不到BaseDAL<T>。C# 是强类型,所谓的泛型只是类型安全,编译时会根据你使用的BaseDAL<object/int/string>进行编译,没有BaseDAL<T>类型,有的只是具体的BaseDAL<object/int/string>类型,而且BaseDAL<object/int/string>是不一样的,道理等同于List<T>模型。
看你使用反射和泛型,想实现IOC控制反转和工厂?追问
那我想像现在这样通过加载程序集的方法来创建BaseDAL的一个实例的话应该怎样做呢?user是我自己写的一个model类
以上是关于C#关于反射创建泛型类的主要内容,如果未能解决你的问题,请参考以下文章