源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C#反射在实际应用中的实例代码

  • 时间:2021-05-28 22:36 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C#反射在实际应用中的实例代码
反射提供了封装程序集、模块和类型的对象(Type 类型)。可以使用反射动态创建类型的实例,将类型绑定到现有对象,或从现有对象获取类型并调用其方法或访问其字段和属性。如果代码中使用了属性,可以利用反射对它们进行访问。 下面我就以一个事例来说明反射在项目中的使用方法。 大体分为三个步骤: 第一步,在web.config配置如下代码(目的是为了动态的去修改所需分析的dll)
[u]复制代码[/u] 代码如下:
<appSettings>      <add key="BizAssembly" value="PSMS.Biz"/>  </appSettings> 
第二步,定义一个用于处理公共程序集的类
[u]复制代码[/u] 代码如下:
/// <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("未包含接口所定义的服务类型。");              }          }      } 
第三步,在程序代码中实现调用
[u]复制代码[/u] 代码如下:
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);         //其它功能实现代码          //......         //......     }  } 
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部