示例#1
0
        /// <summary>
        /// Create instances of SampleClassificationObjectType, adding them to the private objects collection.
        /// </summary>
        /// <param name="entry"></param>
        private void ProcessResourceEntry(SampleResourceEntry entry)
        {
            // Create Property provider by matching property adapters with data sources
            // PropertyProvider is called by ResourceStaticAnalysis when code attempts to retrieve a property that has not yet been created
            var pp = new PropertyProvider();

            // Add a pair: property adapter and an object that serves as source
            foreach (var adapter in resourceFilePropertyAdapters)
            {
                pp.AddPropertyAdapterDataSourcePair(adapter, entry);
            }
            // Initialize an instance of SampleClassificationObjectType using the PropertyProvider built above
            var obj = new SampleClassificationObjectType(pp);

            foreach (var adapter in selfPropertyAdapters)
            {
                // Now, add one more poperty adapter that uses the SampleClassificationObjectType object itself as data source
                // this one builds properties from existing properties.
                pp.AddPropertyAdapterDataSourcePair(adapter, obj);
            }

            // This reduces amount of memory used by object by compacting internal representation.
            pp.Compact();
            // Add to the list of all objects being constructed by this adapter.
            objects.Add(obj);
        }
示例#2
0
        private static Property GetProperty(SampleClassificationObjectType.SupportedProperties propertyId, SampleResourceEntry resourceEntry)
        {
            if (resourceEntry == null)
            {
                throw new PropertyRetrievalException(String.Format(CultureInfo.CurrentCulture, "DataSource must not be null. DataSource name: {0}", resourceEntry.GetType().Name));
            }

            try
            {
                switch (propertyId)
                {
                case SampleClassificationObjectType.SupportedProperties.Comments: return(new StringProperty((byte)propertyId, resourceEntry.Comments));

                case SampleClassificationObjectType.SupportedProperties.ResourceId: return(new StringProperty((byte)propertyId, resourceEntry.ResourceId));

                case SampleClassificationObjectType.SupportedProperties.SourceString: return(new StringProperty((byte)propertyId, resourceEntry.Value));

                default:
                {
                    string message = String.Format(CultureInfo.CurrentCulture, "Cannot provide property {0} from datasource of type {1}.", propertyId.ToString(), resourceEntry.GetType().Name);
                    throw new InvalidOperationException(message);
                }
                }
            }
            catch (NullReferenceException e)
            {
                return(null);
            }
        }