public CatalogCache(Type stubType, ICachedComposablePartCatalogSite cachedCatalogSite) { Assumes.NotNull(stubType); cachedCatalogSite = cachedCatalogSite ?? new EmptyCachedComposablePartCatalogSite(); this._stubType = stubType; this._cachedCatalogSite = cachedCatalogSite; // Get catalog index MethodInfo getIndexMethod = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeMethod(this._stubType, CacheStructureConstants.CachingStubGetCatalogIndexMethodName, BindingFlags.Public | BindingFlags.Static); Func <IDictionary <string, IEnumerable <IntPtr> > > getIndex = (Func <IDictionary <string, IEnumerable <IntPtr> > >)Delegate.CreateDelegate(typeof(Func <IDictionary <string, IEnumerable <IntPtr> > >), getIndexMethod); this._catalogIndex = getIndex.Invoke(); // Get part factory MethodInfo getPartFactoryMethod = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeMethod(this._stubType, CacheStructureConstants.CachingStubGetPartFactoryMethodName, BindingFlags.Static | BindingFlags.Public); this._getPartFactory = (Func <IntPtr, ComposablePartDefinition>)Delegate.CreateDelegate(typeof(Func <IntPtr, ComposablePartDefinition>), getPartFactoryMethod); // get fields FieldInfo importDefinitionFactoryField = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeField(this._stubType, CacheStructureConstants.CachingStubImportDefinitionFactoryFieldName, BindingFlags.Public | BindingFlags.Static); FieldInfo exportDefinitionFactoryField = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeField(this._stubType, CacheStructureConstants.CachingStubExportDefinitionFactoryFieldName, BindingFlags.Public | BindingFlags.Static); FieldInfo partDefinitionFactoryField = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeField(this._stubType, CacheStructureConstants.CachingStubPartDefinitionFactoryFieldName, BindingFlags.Public | BindingFlags.Static); // initialize the cache fields with the factory methods importDefinitionFactoryField.SetValue(null, new Func <ComposablePartDefinition, IDictionary <string, object>, ImportDefinition>(this._cachedCatalogSite.CreateImportDefinitionFromCache)); exportDefinitionFactoryField.SetValue(null, new Func <ComposablePartDefinition, IDictionary <string, object>, ExportDefinition>(this._cachedCatalogSite.CreateExportDefinitionFromCache)); partDefinitionFactoryField.SetValue(null, new Func <IDictionary <string, object>, Func <ComposablePartDefinition, IEnumerable <ImportDefinition> >, Func <ComposablePartDefinition, IEnumerable <ExportDefinition> >, ComposablePartDefinition>(this.InternalCreatePartDefinitionFromCache)); }
public ComposablePartCatalogAssemblyCacheReader(Assembly cacheAssembly) { Requires.NotNull(cacheAssembly, "cacheAssembly"); this._cacheAssembly = cacheAssembly; // read the entry point Type entryPointType = ComposablePartCatalogAssemblyCacheReader.GetCacheType(this._cacheAssembly, CacheStructureConstants.EntryPointTypeName); MethodInfo getRootStubMethod = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeMethod(entryPointType, CacheStructureConstants.EntryPointGetRootStubMethodName, BindingFlags.Static | BindingFlags.Public); Func <string> getRootStub = (Func <string>)Delegate.CreateDelegate(typeof(Func <string>), getRootStubMethod); this._rootStubSuffix = getRootStub.Invoke(); }
public ComposablePartCatalogAssemblyCache(Type stubType, ComposablePartCatalogCacheReader reader) { Assumes.NotNull(stubType); Assumes.NotNull(reader); this._stubType = stubType; this._reader = reader; // Get catalog metadata MethodInfo getCatalogMetadataMethod = ComposablePartCatalogAssemblyCacheReader.GetCacheTypeMethod(this._stubType, CacheStructureConstants.CachingStubGetCatalogMetadata, BindingFlags.Public | BindingFlags.Static); Func <IDictionary <string, object> > getCatalogMetadata = (Func <IDictionary <string, object> >)Delegate.CreateDelegate(typeof(Func <IDictionary <string, object> >), getCatalogMetadataMethod); this._metadata = getCatalogMetadata.Invoke(); }