static PropStoreServicesForThisApp() { _mct.Measure("Begin PropStoreServicesForThisApp"); //Person p = new Person(); // _mct.MeasureAndReport("New Person"); // Build the PropFactory Provider and the two Delegate Caches on which it depends. ITypeDescBasedTConverterCache typeDescBasedTConverterCache = new TypeDescBasedTConverterCache(); _mct.MeasureAndReport("After new TypeDescBasedTConverterCache"); IProvideDelegateCaches delegateCacheProvider = new SimpleDelegateCacheProvider(typeof(PropBag), typeof(APFGenericMethodTemplates)); _mct.MeasureAndReport("After new SimpleDelegateCacheProvider"); IConvertValues valueConverter = new PropFactoryValueConverter(typeDescBasedTConverterCache); ResolveTypeDelegate typeResolver = null; _propFactoryFactory = BuildThePropFactoryFactory(valueConverter, delegateCacheProvider, typeResolver); // Build the AppDomain-Wide Property Store and the EventHandler (Delegate) Dispatch cache on which it depends. HandlerDispatchDelegateCacheProvider = new SimpleHandlerDispatchDelegateCacheProvider(); _mct.MeasureAndReport("After new SimpleHandlerDispatchDelegateCacheProvider"); // This creates the global, shared, Property Store. _theStore = new SimplePropStoreProxy(MAX_NUMBER_OF_PROPERTIES, HandlerDispatchDelegateCacheProvider); // Get a reference to the PropStoreAccessService Factory that the PropertyStore provides. PSAccessServiceCreatorInterface psAccessServiceFactory = _theStore.PropStoreAccessServiceFactory; _vmActivator = new SimpleViewModelActivator(); _mct.MeasureAndReport("After new SimpleViewModelActivator"); IPropModelBuilder propModelBuilder = GetPropModelProvider(_propFactoryFactory); PropModelCache = new SimplePropModelCache(propModelBuilder); WrapperTypeCreator = BuildSimpleWrapperTypeCreator(); _mct.MeasureAndReport("After GetSimpleWrapperTypeCreator"); ViewModelFactory = new SimpleViewModelFactory(PropModelCache, _vmActivator, psAccessServiceFactory, null, WrapperTypeCreator); _mct.MeasureAndReport("After new ViewModelHelper"); AutoMapperService = GetAutoMapperProvider(ViewModelFactory); _mct.MeasureAndReport("After GetAutoMapperProvider"); ViewModelFactory.AutoMapperService = AutoMapperService; //_defaultPropFactory = BuildDefaultPropFactory(valueConverter, delegateCacheProvider, typeResolver); //_mct.MeasureAndReport("After new BuildDefaultPropFactory"); }
protected override Action EstablishContext() { _mct = new MemConsumptionTracker ( "PSMT", "Starting MemTracker for PropStoreServices, AutoMapperSupport and related.", TrackMemConsumptionUsedToEstablishContext ); // Build the PropFactory Provider and the two Delegate Caches on which it depends. ITypeDescBasedTConverterCache typeDescBasedTConverterCache = new TypeDescBasedTConverterCache(); _mct.MeasureAndReport("After new TypeDescBasedTConverterCache"); IProvideDelegateCaches delegateCacheProvider = new SimpleDelegateCacheProvider(typeof(PropBag), typeof(APFGenericMethodTemplates)); _mct.MeasureAndReport("After new SimpleDelegateCacheProvider"); IConvertValues valueConverter = new PropFactoryValueConverter(typeDescBasedTConverterCache); ResolveTypeDelegate typeResolver = null; // The Factory used to build PropFactories. IPropFactoryFactory propFactoryFactory = BuildThePropFactoryFactory ( valueConverter, delegateCacheProvider, typeResolver ); // Build the Property Store and the EventHandler (Delegate) Dispatch cache on which it depends. // This Property Store is a regular property of this class and not a (static) AppDomain-wide singleton. IProvideHandlerDispatchDelegateCaches handlerDispatchDelegateCacheProvider = new SimpleHandlerDispatchDelegateCacheProvider(); _mct.MeasureAndReport("After new SimpleHandlerDispatchDelegateCacheProvider"); // Property Store _theStore = new SimplePropStoreProxy(MaxPropsPerObject, handlerDispatchDelegateCacheProvider); propModelBuilder // PropStoreAccessService Factory. PropStoreAccessService_Factory = _theStore.PropStoreAccessServiceFactory; // ViewModelActivator. ViewModelActivatorInterface vmActivator = new SimpleViewModelActivator(); _mct.MeasureAndReport("After new SimpleViewModelActivator"); WrapperTypeCreator = BuildSimpleWrapperTypeCreator(); _mct.MeasureAndReport("After GetSimpleWrapperTypeCreator"); // PropModel Provider RemotePropModelBuilder remotePropModelProvider = GetPropModelProvider(propFactoryFactory /*, ConfigPackageNameSuffix*/); //PropModelBuilder = remotePropModelProvider; _mct.MeasureAndReport("After GetPropModelProvider"); // Load the PropBag and Mapper Templates LoadPropModelsAndMappers(remotePropModelProvider, ResourceFolderPath, PBTemplateFilenames, MapperRequestFilenames); _mct.MeasureAndReport("After LoadPropModelsAndMappers"); PropModelCache = new SimplePropModelCache(remotePropModelProvider); // Create the ViewModelFactory ViewModelFactory = new SimpleViewModelFactory(PropModelCache, vmActivator, PropStoreAccessService_Factory, null, WrapperTypeCreator); _mct.MeasureAndReport("After new ViewModelFactory"); // AutoMapper Services PropBagMapperService = GetAutoMapperProvider(ViewModelFactory); _mct.MeasureAndReport("After GetAutoMapperProvider"); ViewModelFactory.AutoMapperService = PropBagMapperService; //// Default PropFactory //DefaultPropFactory = BuildDefaultPropFactory // ( // valueConverter, // delegateCacheProvider, // typeResolver // ); //_mct.MeasureAndReport("After BuildDefaultPropFactory"); return(OurCleanupRoutine); void OurCleanupRoutine() { _mct.CompactMeasureAndReport("Before Context Cleanup"); // Wrapper Type Creator if (WrapperTypeCreator is IDisposable disable1) { disable1.Dispose(); } // AutoMapper Provider if (PropBagMapperService is IDisposable disable2) { disable2.Dispose(); } PropBagMapperService = null; // PropModel Provider if (PropModelCache is IDisposable disable3) { disable3.Dispose(); } PropModelCache = null; // ViewModel Helper //if (ViewModelHelper is IDisposable disable4) //{ // disable4.Dispose(); //} //ViewModelHelper = null; // The Property Store _theStore.Dispose(); // Type Converter Cache if (typeDescBasedTConverterCache is IDisposable disable5) { disable5.Dispose(); } // Delegate Cache Provider if (delegateCacheProvider is IDisposable disable6) { disable6.Dispose(); } // Event Handler Dispatcher Delegate Cache Provider if (handlerDispatchDelegateCacheProvider is IDisposable disable7) { disable7.Dispose(); } // PropModel Provider if (remotePropModelProvider is IDisposable disable8) { disable8.Dispose(); } propFactoryFactory = null; //DefaultPropFactory = null; _mct.CompactMeasureAndReport("After Context Cleanup"); } }