public CustomFactoryGenerator(CustomFactoryDefinition definition) { this.loaderBuilder = DynamicAssemblyManager.DefineType("CustomLoaderFor" + definition.CreationType.Name); this.factoryBuilder = DynamicAssemblyManager.DefineType("CustomFactoryFor" + definition.CreationType.Name); this.definition = definition; GenerateTypes(); }
public IFactoryLoader GetLoaderForFactory(Type creationType) { IFactoryLoader loader = null; if (!customFactoryLoaderCache.TryGetValue(creationType, out loader)) { lock(syncLock) { if (!customFactoryLoaderCache.TryGetValue(creationType, out loader)) { var definition = new CustomFactoryDefinition(creationType, this); var builder = new CustomFactoryGenerator(definition); loader = builder.CreateLoader(); customFactoryLoaderCache.Add(creationType, loader); } } } return loader; }