示例#1
0
        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);
        }
示例#2
0
        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>();
        }
示例#4
0
        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);
        }
示例#5
0
        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);
        }
示例#6
0
        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);
        }
示例#7
0
        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);
        }
示例#9
0
        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);
        }
示例#10
0
        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");
            }
        }