C#反射在实际应用中的实例代码
发布时间:2022-11-25 05:06:21
标签:反射,应用
反射提供了封装程序集、模块和类型的对象(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);
//其它功能实现代码
//......
//......
}
}
0
投稿
猜你喜欢
- 若使用 Spring IoC 容器(ApplicationContext或BeanFactory)作为你的业务对象(你也应该这么做!),你会
- Springboot 实体类生成数据库表JPA:springboot -jpa:数据库的一系列的定义数据持久化的标准的体系学习的目的是:利用
- 本文实例总结了C#中split用法。分享给大家供大家参考,具体如下:以下是我转载的两个不同的人的,方便大家及自己查阅string s=&qu
- 在jdk文档中对RandomAccess接口的定义如下: public interface RandomAccess下面是jdk
- 概述递归:指在当前方法内调用自己的这种现象。递归的分类:递归分为两种,直接递归和间接递归。直接递归称为方法自身调用自己。间接递归可以A方法调
- 主要技术实现:spring、 springmvc、 redis、 springboot、 mybatis 、sessi
- 1. 拷贝 Mybatis 反向工程配置文件到项目的根目录下2. 根据项目及表的情况,修改 GeneratorMapper.xml 配置如果
- C/C++的数据类型:一,整型Turbo C: [signed] int 2Byte//有符号数,-32768~32
- 前言随着标准Java的版本更新,开发者总是可以从升级后的版本中获取想要的功能。本文将给大家详细介绍下mac下面的java9版本安装使用,分享
- 以前使用HttpServletResponse可以通过输出流的方式来向前台输出图片。现在大部分都是使用springboot,在使用sprin
- openFeign服务间调用保持请求头信息处理1、注意特殊情况,在定时任务或者内部之间调用,没有request的时候,不要处理直接返回。2、
- 场景:在学习JDBC的语言中,每次都执行通用的几步:即注册驱动,获取连接,创建操作,处理结果,释放资源 过于复杂,因此不妨将上述步骤封装成工
- Spring的主要特性包括IOC和DI,其中DI是IOC的基础。在以前的Spring使用过程中大部分都是使用XML配置文件显式配置sprin
- 前言最近项目targetSdkVersion升级到了26,出现很多问题趟了很多坑,其中就包括本篇的需要解决的问题:全局dialog 不显示。
- 在项目中有使用到延时队列的场景,做个简单的记录说明;首先DelayQueue实现了BlockingQueue,加入其中的元素必须实现Dela
- 此篇文章内容仅限于 描述springboot与 thy 自定义标签的说明,所以你在看之前,请先会使用springboot和thymeleaf
- 在上一节,我们已经完成了项目的整体技术架构设计和具体的数据库设计,接下来,我们搭建整体的开发框架。开发工具选用Idea。开发工具只是为了提高
- 上了这么多年学,我发现一个问题,好象老师都很喜欢点名,甚至点名都成了某些老师的嗜好,一日不点名,就饭吃不香,觉睡不好似的,我就觉得很奇怪,你
- 目录一、图示二、链表的概念及结构三、单链表的实现四、完整代码的展示一、图示二、链表的概念及结构 链表是一种物理存储结构上非连续存储结构,数据
- AudioSource 组件参考属性属性说明Clip音频资源Volume音量大小Mute是否静音Loop是否循环Play on load加载