反射之Assembly与Activator区别
Assembly.CreateInstance 方法 (String)
使用区分大小写的搜索,从此程序集中查找指定的类型,然后使用系统激活器创建它的实例。
Activator.CreateInstance 方法 (Type)
使用与指定参数匹配程度最高的构造函数来创建指定类型的实例。
注意:反射的类的程序集dll必须存在于web层的bin下。
例子一:
//从程序集创建对象实例
string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];//数据层的程序集名称
return (IDbObject)Assembly.Load(path).CreateInstance(path+".DbObject");
//使用与指定参数匹配程度最高的构造函数来创建指定类型的实例
string path = System.Configuration.ConfigurationSettings.AppSettings["DAL"];
string TypeName=path+".DbObject"
Type objType = Type.GetType(TypeName,true);
return (IDbObject)Activator.CreateInstance(objType);
例子二:
假设有类如下:
namespace WebApp2010
{
public class UserProfilerService: IUserProfiler
{
public string GetUserProfiler(string UserId)
{
if (UserId == "A001")
return "Bob";
else return string.Empty;
}
}
}
反射创建类的实例:
Type t = Type.GetType("WebApp2010.UserProfilerService");
IUserProfiler result = (IUserProfiler)Activator.CreateInstance(t);
Response.Write(result.GetUserProfiler("A001"));
IUserProfiler result1 = (IUserProfiler)Activator.CreateInstance(typeof(UserProfilerService));
Response.Write(result1.GetUserProfiler("A001"));
IUserProfiler result2 = (IUserProfiler)Assembly.Load("WebApp2010").CreateInstance("WebApp2010.UserProfilerService");
Response.Write(result2.GetUserProfiler("A001"));
例子三:
TradeSite.WebSiteSet.BLL.EmailQueue
bll =
(TradeSite.WebSiteSet.BLL.EmailQueue)Assembly.Load("TradeSite.WebSiteSet.Component").CreateInstance("TradeSite.WebSiteSet.BLL.EmailQueue");
bll.InsertData(emailinfo);
需要注意的是创建格式:Assembly.Load(程序集名称).CreateInstance(命名空间.类名)
附:关于Assembly类的说明
Assembly类可以获得正在运行的装配件信息,也可以动态的加载装配件,以及在装配件中查找类型信息,并创建该类
型的实例。Type类可以获得对象的类型信息,此信息包含对象的所有要素:方法、构造器、属性等等,通过Type类可以得到这些要素的信息,并且调用之。
MethodInfo包含方法的信息,通过这个类可以得到方法的名称、参数、返回值等,并且可以调用之。诸如此类,还有FieldInfo、
EventInfo等等,这些类都包含在System.Reflection命名空间下。
来源:http://hi.baidu.com/zbphot/item/30ca2a506f71e3acacc8574c