// Copyright 2009-2022 Josh Close // This file is a part of CsvHelper and is dual licensed under MS-PL and Apache 2.0. // See LICENSE.txt for details or visit http://www.opensource.org/licenses/ms-pl.html for MS-PL and http://opensource.org/licenses/Apache-2.0 for Apache 2.0. // https://github.com/JoshClose/CsvHelper using System; using System.Reflection; namespace CsvHelper.Expressions { /// /// Factory to create record creators. /// public class RecordCreatorFactory { private readonly CsvReader reader; private readonly DynamicRecordCreator dynamicRecordCreator; private readonly PrimitiveRecordCreator primitiveRecordCreator; private readonly ObjectRecordCreator objectRecordCreator; /// /// Initializes a new instance using the given reader. /// /// The reader. public RecordCreatorFactory(CsvReader reader) { this.reader = reader; dynamicRecordCreator = new DynamicRecordCreator(reader); primitiveRecordCreator = new PrimitiveRecordCreator(reader); objectRecordCreator = new ObjectRecordCreator(reader); } /// /// Creates a record creator for the given record type. /// /// The record type. public virtual RecordCreator MakeRecordCreator(Type recordType) { if (recordType == typeof(object)) { return dynamicRecordCreator; } if (recordType.GetTypeInfo().IsPrimitive) { return primitiveRecordCreator; } return objectRecordCreator; } } }