// 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;
namespace CsvHelper
{
///
/// Defines the functionality of a class that creates objects
/// from a given type.
///
public interface IObjectResolver
{
///
/// A value indicating if the resolver's
/// returns false that an object will still be created using
/// CsvHelper's object creation. True to fallback, otherwise false.
/// Default value is true.
///
bool UseFallback { get; }
///
/// A value indicating if the resolver is able to resolve
/// the given type. True if the type can be resolved,
/// otherwise false.
///
Func CanResolve { get; }
///
/// The function that creates an object from a given type.
///
Func ResolveFunction { get; }
///
/// Creates an object from the given type using the
/// function. If is false, the object will be
/// created using CsvHelper's default object creation. If
/// is false, an exception is thrown.
///
/// The type to create an instance from. The created object
/// may not be the same type as the given type.
/// Constructor arguments used to create the type.
object Resolve( Type type, params object[] constructorArgs );
///
/// Creates an object from the given type using the
/// function. If is false, the object will be
/// created using CsvHelper's default object creation. If
/// is false, an exception is thrown.
///
/// The type to create an instance from. The created object
/// may not be the same type as the given type.
/// Constructor arguments used to create the type.
T Resolve( params object[] constructorArgs );
}
}