原理:
搜了搜园子,已经有棵这方面的好白菜了!链接如下
http://www.cnblogs.com/whxleem/category/4641.html
实践:
通过原理我们知道反射就是如果仅知道一个类的名称就能通过程序运行得到该类的地址,续而创建该实例。
这里简单叙述一下我们框架中反射的运用。注意一下:我们的框架用的是三层框架
代码:
ObjectBiz objectBiz = _objectBizDal.Get(OID);//OID是数据库中biz层中的ID,它记录了BIZ层的程序集等信息
objectBiz 执行后结果
{SW.FrameWork.EXTJS.Model.ObjectBiz}
_assemblyName: "DemoExtBiz"
_className: "SW.Framework.ExtJsDemo.Biz.CustomerBiz"
_OID: "50"
AssemblyName: "DemoExtBiz"
ClassName: "SW.Framework.ExtJsDemo.Biz.CustomerBiz"
OID: "50"V
public object CreateBiz(ObjectBiz objectBiz)
{
try
{
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(objectBiz.AssemblyName);
if (assembly == null) return null;
return assembly.CreateInstance(objectBiz.ClassName);
}
catch (Exception ex)
{
//_log.Debug("创建ObjectBiz实例失败", ex);
throw;
}
}
assembly 执行后结果
FullName = "DemoExtBiz, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
CodeBase = "E:/vss/开发框架/[3]源代码(Implementation)/Framework[refactor]/Demo/EXTJSDemo/DemoWeb/bin/DemoExtBiz.DLL"
程序阅读:
- 根据程序集名称得到一个类型信息,具体得到了需要用的类的地址。(看assembly执行后结果)。
- assembly.CreateInstance(objectBiz.ClassName);创建了一个对象。
public object CreateBiz(ObjectBiz objectBiz)
{
try
{
System.Reflection.Assembly assembly = System.Reflection.Assembly.Load(objectBiz.AssemblyName);
if (assembly == null) return null;
return assembly.CreateInstance(objectBiz.ClassName);
}
catch (Exception ex)
{
//_log.Debug("创建ObjectBiz实例失败", ex);
throw;
}
}
assembly 执行后结果
FullName = "DemoExtBiz, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
CodeBase = "E:/vss/开发框架/[3]源代码(Implementation)/Framework[refactor]/Demo/EXTJSDemo/DemoWeb/bin/DemoExtBiz.DLL"
程序阅读:
- 根据程序集名称得到一个类型信息,具体得到了需要用的类的地址。(看assembly执行后结果)。
- assembly.CreateInstance(objectBiz.ClassName);创建了一个对象。