-
C#教程之C#反射在实际应用中的实例代码
反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。
下面我就以一个事例来说明反射在项目中的使用方法。
大体分为三个步骤:
第一步,在web.config配置如下代码(目的是为了动态的去修改所需分析的dll)
复制代码 代码如下:
<appSettings>
<add key="BizAssembly" value="PSMS.Biz"/>
</appSettings>
第二步,定义一个用于处理公共程序集的类
复制代码 代码如下:
/// <summary>
/// 完成从客户端获取远程业务逻辑对象的代理
/// </summary>
public static class FacadeService
{
static IDictionary<string, Type> serviceClassCatalog;//定义一个键值对接口对象
static FacadeService()
{
serviceClassCatalog = new Dictionary<string, Type>();
Assembly assembly = Assembly.Load(new AssemblyName(ConfigurationManager.AppSettings["BizAssembly"]));//开始加载程序集对象
Type[] types = assembly.GetExportedTypes();//获取程序集中所有对象的类型集合
Type baseType = typeof(MarshalByRefObject);
foreach (Type type in types)
{
if (baseType.IsAssignableFrom(type))
{
Type[] interfaces = type.GetInterfaces();
//此处登记的是接口类型最终派生的接口类型,即最高层接口
if (interfaces.Length > 0)
{
serviceClassCatalog.Add(interfaces[0].FullName, type);
}
}
}
}
/// <summary>
/// 根据传入的业务逻辑类的接口类型,返回实现该接口的类型对象实例远程代理
/// </summary>
/// <typeparam name="IFacade">具体的业务逻辑接口类型</typeparam>
/// <returns>实现该接口的类型对象实例远程代理</returns>
public static IFacade GetFacade<IFacade>()
{
string typeName = typeof(IFacade).FullName;
if (serviceClassCatalog.ContainsKey(typeName))
{
object realProxy = Activator.CreateInstance(serviceClassCatalog[typeName]);
return (IFacade)realProxy;
}
else
{
throw new Exception("未包含接口所定义的服务类型。");
}
}
}
第三步,在程序代码中实现调用
复制代码 代码如下:
public partial class MyTest: System.Web.UI.Page
{
//在后台代码中构建一个(测试用的)接口的实例对象
static IUserInfoFacade userInfoFacade = FacadeService.GetFacade<IUserInfoFacade>();
//其它功能实现代码
//......
//......
private void Method1()
{
//具体的调用
List<UserInfo> lstUserInfo = userInfoFacade.GetUserInfoList(unitCode, 0, 0);
//其它功能实现代码
//......
//......
}
}
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式