反射之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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端