/// <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); }
private static Property GetSelfProperty(SampleClassificationObjectType.SupportedProperties propertyId, SampleClassificationObjectType cO) { if (Object.ReferenceEquals(cO, null)) { throw new NullReferenceException(String.Format(CultureInfo.CurrentCulture, "DataSource must not be null. DataSource name: {0}", cO.GetType().Name)); } switch (propertyId) { case SampleClassificationObjectType.SupportedProperties.Comments: return(new StringProperty((byte)propertyId, cO.Comments)); case SampleClassificationObjectType.SupportedProperties.ResourceId: return(new StringProperty((byte)propertyId, cO.ResourceId)); case SampleClassificationObjectType.SupportedProperties.SourceString: return(new StringProperty((byte)propertyId, cO.SourceString)); default: { string message = String.Format(CultureInfo.CurrentCulture, "Cannot provide property {0} from datasource of type {1}.", propertyId.ToString(), cO.GetType().Name); throw new InvalidOperationException(message); } } }