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()); }