public DynamicCsvRowActivatorBuilder(IConverterProvider converterProvider, IColumnNameMapper columnNameMapper) { if (converterProvider == null) { throw new ArgumentNullException("converterProvider"); } if (columnNameMapper == null) { throw new ArgumentNullException("columnNameMapper"); } this.converterProvider = converterProvider; this.columnNameMapper = columnNameMapper; }
public ICsvRowActivatorFactory <T> Create(IConverterProvider converterProvider, IColumnNameMapper columnNameMapper) { CachingKey key = new CachingKey(converterProvider, columnNameMapper); if (!cache.Keys.Contains(key)) { var newFactory = factoryFactory.Create(converterProvider, columnNameMapper); cache.Add(key, newFactory); return(newFactory); } else { return(cache[key]); } }
public ICsvRowActivatorFactory <T> Create(IConverterProvider converterProvider, IColumnNameMapper columnNameMapper) { // Create assembly/module bool saveDll = false; AssemblyName assemblyName = new AssemblyName("DynamicCsvRowActivator"); AssemblyBuilder assemblyBuilder = BuildAssembly(assemblyName, new Version(1, 0, 0, 0), saveDll); ModuleBuilder moduleBuilder = BuildModule(assemblyBuilder, assemblyName, saveDll); // Create activator type DynamicCsvRowActivatorBuilder <T> activatorBuilder = new DynamicCsvRowActivatorBuilder <T>(converterProvider, columnNameMapper); TypeBuilder activatorTypeBuilder = activatorBuilder.Build(assemblyBuilder, moduleBuilder); Type activatorType = activatorTypeBuilder.CreateType(); ConstructorInfo activatorConstructor = activatorType.GetConstructor(new Type[] { typeof(string[]) }); // Create factory type DynamicCsvRowActivatorFactoryBuilder <T> factoryBuilder = new DynamicCsvRowActivatorFactoryBuilder <T>(); TypeBuilder typeBuilder = factoryBuilder.Build(assemblyBuilder, moduleBuilder, activatorConstructor); Type factoryType = typeBuilder.CreateType(); ConstructorInfo factoryConstructor = factoryType.GetConstructor(Type.EmptyTypes); // Save the dll if (saveDll) { assemblyBuilder.Save("DynamicCsvRowActivator.dll"); } // Create an instance of a factory ICsvRowActivatorFactory <T> factory = (ICsvRowActivatorFactory <T>)factoryConstructor.Invoke(new object[] { }); return(factory); }
public CachingKey(IConverterProvider converterProvider, IColumnNameMapper columnNameMapper) { this.ConverterProvider = converterProvider; this.ColumnNameMapper = columnNameMapper; }