示例#1
0
 public static void AddToTypeContractorCache(Type t)
 {
     if (SHORTENTYPENAME)
     {
         lock (SyncTypeTables)
         {
             if (TypeCacheUtils.IsGeneratedType(t))
             {
                 //We will map the intercept types to their base types
                 //This typecontractor cache is used for serialization
                 //We do not need to know the intercepted type
                 var interceptedType = t;
                 TypeCacheUtils.GetOriginalType(ref t);
                 string currentKey;
                 if (!typeContractorReverse.TryGetValue(t, out currentKey))
                 {
                     AddToTypeContractorCache(t);
                     currentKey = typeContractorReverse[t];
                 }
                 typeContractorReverse.Add(interceptedType, currentKey);
             }
             else
             {
                 string key = typeContractorForward.Count.ToBase95ToString(PADDEDCONTRACTEDTYPENAME);
                 if (key.Length == 1)
                 {
                     key += '~';                   //by now the size is 2 then only add one char '~'
                 }
                 typeContractorForward.Add(key, t);
                 typeContractorReverse.Add(t, key);
             }
         }
     }
 }
 public override JsonContract ResolveContract(Type type)
 {
     //We do not want two different contracts for the proxy type and the actual type
     if (TypeCacheUtils.IsGeneratedType(type))
     {
         TypeCacheUtils.GetOriginalType(ref type);
     }
     return(base.ResolveContract(type));
 }
        public System.Web.Mvc.ActionResult QueryClose(string viewId)
        {
            //Find corresponding Form Type

            var genericInterface = typeof(UpgradeHelpers.Interfaces.ILogicWithViewModel <>);
            var view             = StateManager.Current.GetObject(viewId) as UpgradeHelpers.Interfaces.IViewModel;

            if (view == null)
            {
                TraceUtil.TraceError("QueryClose issue for View {0}", viewId);
                return(new UpgradeHelpers.WebMap.Server.AppChanges());
            }
            var viewType = view.GetType();

            //Get original type if View was instrumented
            TypeCacheUtils.GetOriginalType(ref viewType);

            var interfaceBindingFormAndViewTogether = genericInterface.MakeGenericType(viewType);

            //I assume that the matching form logic is defined in the same assembly and that there is only one
            foreach (var clazz in viewType.Assembly.GetTypes())
            {
                if (interfaceBindingFormAndViewTogether.IsAssignableFrom(clazz))
                {
                    var logic = IocContainerImplWithUnity.Current.Resolve(clazz, new object[] { view, }) as UpgradeHelpers.Interfaces.ILogicWithViewModel <UpgradeHelpers.Interfaces.IViewModel>;
                    if (logic == null)
                    {
                        TraceUtil.WriteLine("WebMapViewManagerController::QueryClose error could not recover form object");
                    }
                    else
                    {
                        ViewManager.DisposeView(logic);
                    }
                    break;
                }
            }
            return(new UpgradeHelpers.WebMap.Server.AppChanges());
        }