关于类型解析的一些辅助方法

类型解解析,通常是通过程序集和类名,也即是通常的反射,通过反射,我们可以在程序运行的时候,获取类型,属性....,首先,我们定义一个HashTable用来保存解析的数据

private static Hashtable _assemblyCaches = null;

这段代码有两个参数,一个是程序集名称,一个是类名,

代码
/// <summary>
/// 从程序集中获得类型
/// </summary>
/// <param name="assemblyString">程序集</param>
/// <param name="classString">类名称</param>
/// <returns></returns>
public static Type ResolveType(string assemblyString, string classString)
{
if (_assemblyCaches == null)
_assemblyCaches
= new Hashtable();
if (!string.IsNullOrEmpty(assemblyString) && !string.IsNullOrEmpty(classString))
{
string[] s = new string[2] {classString,assemblyString};
Assembly assem
= (Assembly)_assemblyCaches[s[1].Trim()];
if (assem == null)
{
assem
= Assembly.Load(s[1].Trim());
if (!_assemblyCaches.Contains(s[1].Trim()))
{
lock (_assemblyCaches.SyncRoot)
{
_assemblyCaches.Add(s[
1].Trim(), assem);
}
}
}
return assem.GetType(s[0]);
}
return null;
}

上面解析的方法已经写好了,便可以通过这个方法实例化类,采用了List<T>,呵呵这是必须的,

代码
public static T CreateInstance<T>(string assemblyString, string classString)
{
Type type
= ResolveType(assemblyString, classString);
T instance
= (T)Activator.CreateInstance(type);

return instance;
}
posted @ 2010-09-17 13:40  marr  阅读(206)  评论(0编辑  收藏  举报