private PropModelType FixUpPropFactory(PropModelType propModel, IPropFactoryFactory propFactoryGenerator) { //// Include a reference to this PropModelBuilder //propModel.PropModelBuilder = this; // If the propModel does not supply a PropFactory, create one using the PropFactoryType. if (propModel.PropFactory == null) { if (propModel.PropFactoryType != null) { // If the propModel does not specify a PropFactory, but it does specify a PropFactoryType, // use the PropFactoryFactory given to us to create a PropFactory. IPropFactory generated = propFactoryGenerator.BuildPropFactory(propModel.PropFactoryType); propModel.PropFactory = generated; System.Diagnostics.Debug.WriteLine($"Just created a new PropFactory of type: {propModel.PropFactoryType} for the propModel with FullClassName: {propModel}."); } else { throw new InvalidOperationException($"The PropModel with FullClassName: {propModel} does not have a value for PropFactory, nor does it have a value for PropFactoryType."); } } return(propModel); }
private RemotePropModelBuilder GetPropModelProvider(IPropFactoryFactory propFactoryFactory) { ResourceDictionaryProvider rdProvider = new ResourceDictionaryProvider(); PropBagTemplateParser pbtParser = new PropBagTemplateParser(); RemotePropModelBuilder propModelBuilder = new RemotePropModelBuilder(rdProvider, pbtParser, propFactoryFactory); return(propModelBuilder); }
public JasonPropModelBuilder ( IParsePropBagTemplates propBagTemplateParser, IPropFactoryFactory propFactoryFactory ) { _pbtParser = propBagTemplateParser; _propFactoryFactory = propFactoryFactory ?? throw new ArgumentNullException(nameof(propFactoryFactory)); _propModelCache = new Dictionary <string, PropModelType>(); _mapperRequestCache = new Dictionary <string, IMapperRequest>(); }
private IPropFactoryFactory GetThePropFactoryFactory() { ITypeDescBasedTConverterCache typeDescBasedTConverterCache = new TypeDescBasedTConverterCache(); IProvideDelegateCaches delegateCacheProvider = new SimpleDelegateCacheProvider(typeof(PropBag), typeof(APFGenericMethodTemplates)); IConvertValues valueConverter = new PropFactoryValueConverter(typeDescBasedTConverterCache); ResolveTypeDelegate typeResolver = null; IPropFactoryFactory result = BuildThePropFactoryFactory(valueConverter, delegateCacheProvider, typeResolver); return(result); }
protected virtual RemotePropModelBuilder GetPropModelProvider ( IPropFactoryFactory propFactoryFactory //, string configPackageNameSuffix ) { ResourceDictionaryProvider rdProvider = new ResourceDictionaryProvider(); PropBagTemplateParser pbtParser = new PropBagTemplateParser(); RemotePropModelBuilder propModelBuilder = new RemotePropModelBuilder(rdProvider, pbtParser, propFactoryFactory /*, configPackageNameSuffix*/); _mct.MeasureAndReport("After new PropModelBuilder"); return(propModelBuilder); }
public PropModelCacheInterface GetPropModelCache_V1() { if (_propModelCache_V1 == null) { IPropFactoryFactory propFactoryFactory = GetThePropFactoryFactory(); // PropModel Provider RemotePropModelBuilder remotePropModelProvider = GetPropModelProvider(propFactoryFactory); // Load the PropBag and Mapper Templates LoadPropModelsAndMappers(remotePropModelProvider, _resourceFolderPath, _pbTemplateFilenames, _mapperRequestFilenames); _propModelCache_V1 = new SimplePropModelCache(remotePropModelProvider); } return(_propModelCache_V1); }
public RemotePropModelBuilder ( ResourceDictionaryProvider resourceDictionaryProvider, IParsePropBagTemplates propBagTemplateParser, IPropFactoryFactory propFactoryFactory //, string mapperConfigPackageNameSuffix ) { _resourceDictionaryProvider = resourceDictionaryProvider; _pbtParser = propBagTemplateParser; _propFactoryFactory = propFactoryFactory; //MapperConfigPackageNameSuffix = mapperConfigPackageNameSuffix; _propModelCache = new Dictionary <string, PropModelType>(); _mapperRequestCache = new Dictionary <string, IMapperRequest>(); }
private static IPropModelBuilder GetPropModelProvider ( IPropFactoryFactory propFactoryFactory ) { IPropBagTemplateBuilder propBagTemplateBuilder = new PropBagTemplateBuilder(Application.Current.Resources); IMapperRequestBuilder mapperRequestBuilder = new MapperRequestBuilder(Application.Current.Resources); IParsePropBagTemplates propBagTemplateParser = new PropBagTemplateParser(); IPropModelBuilder propModelBuilder = new SimplePropModelBuilder ( propBagTemplateBuilder, mapperRequestBuilder, propBagTemplateParser, propFactoryFactory ); return(propModelBuilder); }
private PropModelType FixUpPropFactory(PropModelType propModel, IPropFactoryFactory propFactoryGenerator) { //// Include a reference to this PropModelBuilder //propModel.PropModelBuilder = this; if (propModel.PropFactory == null) { if (propModel.PropFactoryType != null) { // If the propModel does not specify a PropFactory, but it does specify a PropFactoryType, // use the PropFactoryFactory given to us to create a PropFactory. IPropFactory generated = propFactoryGenerator.BuildPropFactory(propModel.PropFactoryType); propModel.PropFactory = generated; } else { throw new InvalidOperationException("The PropModel does not have a value for PropFactory, nor does it have a value for PropFactoryType."); } } return(propModel); }
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"); } }