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;
 }
Example #2
0
        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);
        }
Example #4
0
 public CachingKey(IConverterProvider converterProvider, IColumnNameMapper columnNameMapper)
 {
     this.ConverterProvider = converterProvider;
     this.ColumnNameMapper  = columnNameMapper;
 }