Exemplo n.º 1
0
        //public abstract IProvideADataSourceProvider GetDSProviderProvider(PropIdType propId, PropKindEnum propKind, object iDoCrudDataSource, PSAccessServiceInterface storeAccesor, IMapperRequest mr);

        public virtual IProp CreateGenFromObject(Type typeOfThisProperty,
                                                 object value,
                                                 PropNameType propertyName, object extraInfo,
                                                 PropStorageStrategyEnum storageStrategy, bool isTypeSolid, PropKindEnum propKind,
                                                 Delegate comparer, bool useRefEquality = false, Type itemType = null)
        {
            MemConsumptionTracker mct = new MemConsumptionTracker(enabled: false);

            if (propKind == PropKindEnum.Prop)
            {
                CreateScalarProp propCreator = GetPropCreator(typeOfThisProperty);
                mct.MeasureAndReport("GetPropCreator", $"for {propertyName}");

                IProp prop = propCreator(this, haveValue: true, value: value, useDefault: false, propertyName: propertyName,
                                         extraInfo: extraInfo, storageStrategy: storageStrategy, isTypeSolid: isTypeSolid,
                                         comparer: comparer, useRefEquality: useRefEquality, getDefaultValFunc: null);

                mct.MeasureAndReport("Ran propCreator to get IProp", $"for {propertyName}");

                return(prop);
            }
            else if (propKind.IsCollection())
            {
                CreateCPropFromObjectDelegate propCreator = GetCPropCreator(typeOfThisProperty, itemType);
                mct.MeasureAndReport("GetCPropCreator", $"for {propertyName}");

                IProp prop = propCreator(this, value: value, propertyName: propertyName,
                                         extraInfo: extraInfo, storageStrategy: storageStrategy, isTypeSolid: isTypeSolid,
                                         comparer: comparer, useRefEquality: useRefEquality);
                mct.MeasureAndReport("Ran GetCPropCreator to get IProp", $"for {propertyName}");

                return(prop);
            }
            else
            {
                throw new InvalidOperationException($"PropKind = {propKind} is not recognized or is not supported.");
            }
        }
Exemplo n.º 2
0
        // From Object
        protected virtual CreateCPropFromObjectDelegate GetCPropCreator(Type collectionType, Type itemType)
        {
            CreateCPropFromObjectDelegate result = DelegateCacheProvider.CreateCPropFromObjectCache.GetOrAdd(new TypePair(collectionType, itemType));

            return(result);
        }