用xpo实现dc技术的关键点-XPO是如何处理接口类型与真实类型的对应关系的

https://www.devexpress.com/Support/Center/Question/Details/Q487000/xpodatamodel-and-model-interfaces

代码来自于上面的网址,这个代码功能是xpo解析类型信息时,可以有个中转.

这也成了xaf中dc机制的一个关键点,即,接口信息需要有一个真实的对应类型信息才行.

也说是说,接口类型只是一个公开给程序员的信息,ta必须对应一个真实的classinfo,这个classinfo用于xpo解析真实的表\字段\表达式等其他元数据时使用.

 public class InterfaceAsForcedAliasHelper {
            public InterfaceAsForcedAliasHelper() { }
            public InterfaceAsForcedAliasHelper(ReflectionDictionary dictionary)
                : this() {
                Help(dictionary);
            }
            public void Help(ReflectionDictionary dictionary) {
                dictionary.CanGetClassInfoByTypeHandler += new EventHandler<CanGetClassInfoByTypeEventArgs>(canGet);
                dictionary.ResolveClassInfoByTypeHandler += new EventHandler<ResolveClassInfoByTypeEventArgs>(resolve);
            }
            Dictionary<Type, Type> map = new Dictionary<Type, Type>();
            public void Map(Type interfaceType, Type actualClassInfoType) {
                map.Add(interfaceType, actualClassInfoType);
            }
            void canGet(object sender, CanGetClassInfoByTypeEventArgs e) {
                if(e.CanGetClassInfo.HasValue)
                    return;
                if(map.ContainsKey(e.ClassType))
                    e.CanGetClassInfo = true;
            }
            void resolve(object sender, ResolveClassInfoByTypeEventArgs e) {
                if(e.ClassInfo != null)
                    return;
                Type mapType;
                if(map.TryGetValue(e.ClassType, out mapType)) {
                    if(mapType != null && mapType != e.ClassType) {
                        e.ClassInfo = e.Dictionary.QueryClassInfo(mapType);
                    }
                }
            }
        }
            ReflectionDictionary myDictionary = new ReflectionDictionary();
            InterfaceAsForcedAliasHelper helper = new InterfaceAsForcedAliasHelper(myDictionary);
            helper.Map(typeof(IInterfaceAsForcedAliasTestPerson), typeof(InterfaceAsForcedAliasTestPerson));
            IDataLayer dl = new SimpleDataLayer(myDictionary, new InMemoryDataStore());
时间: 2024-08-24 16:49:15

用xpo实现dc技术的关键点-XPO是如何处理接口类型与真实类型的对应关系的的相关文章

射频识别技术漫谈(20)——RC系列射频接口芯片

目前基于13.56MHz的射频识别技术主要有ISO14443A.ISO14443B.ISO15693和FELICA技术.针对13.56MHz的射频识别技术,NXP开发了一系列名字以RC(Radio Chip)开头的射频接口芯片,包括RC500.RC400.RC530.RC531.RC632等,这些芯片的设计架构.引脚排列.内部寄存器阵列.天线设计等方面基本相同,不同之处主要是与微控制器的接口界面.支持的协议种类等不一样.后来的RC522.PN512也大体继承了同样的设计思路,只是在供电电压和封装

如何使用反射技术获取泛型类的真实类型?

平常我们需要获取某个类的类型,一般是直接使用 "实例.getClass()",获取 "类名 .class" 直接获取 . 例如: 假设此时有一个User类,那么要获取该User类的真实类型的话,可以直接使用类名+".class"获取: "User.class" 或者,通过User类的实例 user.getClass() 来获取: 上面两个例子是已经确定是User类型了,所以,才可以使用上面的方法. 而泛型类因为还不能确定是什么

基于 request cache 请求缓存技术优化批量商品数据查询接口_一点课堂(多岸学院)

基于 request cache 请求缓存技术优化批量商品数据查询接口 Hystrix command 执行时 8 大步骤第三步,就是检查 Request cache 是否有缓存. 首先,有一个概念,叫做 Request Context 请求上下文,一般来说,在一个 web 应用中,如果我们用到了 Hystrix,我们会在一个 filter 里面,对每一个请求都施加一个请求上下文.就是说,每一次请求,就是一次请求上下文.然后在这次请求上下文中,我们会去执行 N 多代码,调用 N 多依赖服务,有的

Python的Web编程[2] -&gt; WebService技术[0] -&gt; 利用 Python 调用 WebService 接口

WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. WebService主要由以下三种技术构成,XML+XSD,SOAP和WSDL XML+XSD: WebService采用HTTP协议传输数据,采用XML格式封装数据(即XML中说明调用远程服务对象的哪个方法,传递的参数是什么,以及服务对象的返回结果是什么).XML是WebService平台中表示数据

网络互联技术(四)-LSA的第四和第五种类型详解

LSA的第四和第五种类型详解 一.External LSA:第五种LSA 我们前面已经详细介绍了前面三种LSA,今天就接着介绍第四种和第五种LSA.因为理解ASBR Summary LSA--第四种LSA需要涉及External LSA的一些知识,所以我们先介绍第五种LSA,然后再回过头来看第四种LSA. External LSA由ASBR(Autonomous System Border Router,自治系统边界路由器,我们前面说过了OSPF网络就是一个自治系统)产生.它是用来通告OSPF网

前端技术之:如何Mock GraphQL接口数据

// 第一步:引入所依赖的库const { makeExecutableSchema, addMockFunctionsToSchema } = require('graphql-tools');const { graphql } = require('graphql'); // 第二步:定义GraphQL Schemaconst schemaString = ` type User { id: ID, name: String, age: Int, address: String } type

java学习资料

必须养成好的的编码习惯:缩进(用空格).注释.命名约定. 大小写敏感. 单独的":"代表一条空语句. main函数是我们整个程序的执行入口所以必须是静态公开的. 必须写成这样:  public static void main(String[]args){...} 生成jar包: 在eclipse里,选中要打包的几个文件,右键-Export-写文件名-Next-Next-选main方法的class-finish 在jar包的同一文件夹下,新建一个空文档,写"java -jar

【转载】依赖倒转原则

3.1 依赖倒置原则的定义 依赖倒置原则(Dependence Inversion Principle,简称DIP)这个名字看着有点别扭,"依赖"还"倒置",这到底是什么意思?依赖倒置原则的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon

C# 序列化过程中的已知类型(Known Type)

WCF下的序列化与反序列化解决的是数据在两种状态之间的相互转化:托管类型对象和XML.由于类型定义了对象的数据结构,所以无论对于序列化还是反序列化,都必须事先确定对象的类型.如果被序列化对象或者被反序列化生成的对象包含不可知的类型,序列化或者反序列化将会失败.为了确保DataContractSerializer的正常序列化和反序列化,我们需要将“未知”类型加入DataContractSerializer“已知”类型列表中. 一.未知类型导致序列化失败 .NET的类型可以分为两种:声明类型和真实类