zoukankan      html  css  js  c++  java
  • 用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());
  • 相关阅读:
    UVALive 4764 简单dp水题(也可以暴力求解)
    poj 2151 概率DP(水)
    poj 2299 归并排序求逆序数 (可做模板)
    poj2388 更水
    poj1936 假期计划第一水
    poj 3080 kmp求解多个字符串的最长公共字串,(数据小,有点小暴力 16ms)
    UVA315:Network(求割点)
    POJ1236:Network of Schools (思维+Tarjan缩点)
    SPOJ
    HDU4305:Lightning(生成树计数+判断点是否在线段上)
  • 原文地址:https://www.cnblogs.com/foreachlife/p/7569981.html
Copyright © 2011-2022 走看看