ModelBuilder.DefaultExecuteStrategy.CreateInstance C# (CSharp) Method

CreateInstance() private method

private CreateInstance ( ITypeCreator typeCreator, Type type, string referenceName, LinkedList buildChain, object args ) : object
typeCreator ITypeCreator
type System.Type
referenceName string
buildChain LinkedList
args object
return object
        private object CreateInstance(
            ITypeCreator typeCreator,
            Type type,
            string referenceName,
            LinkedList<object> buildChain,
            object[] args)
        {
            object item;

            if (args?.Length > 0)
            {
                // We have arguments so will just let the type creator do the work here
                item = typeCreator.Create(type, referenceName, buildChain, args);
            }
            else if (typeCreator.AutoDetectConstructor)
            {
                // Use constructor detection to figure out how to create this instance
                var constructor = Configuration.ConstructorResolver.Resolve(type, args);

                var parameterInfos = constructor.GetParameters();

                if (parameterInfos.Length == 0)
                {
                    item = typeCreator.Create(type, referenceName, buildChain);
                }
                else
                {
                    // Get values for each of the constructor parameters
                    var parameters = new Collection<object>();

                    foreach (var parameterInfo in parameterInfos)
                    {
                        var context = buildChain.Last?.Value;

                        Log.CreateParameter(type, parameterInfo.ParameterType, parameterInfo.Name, context);

                        // Recurse to build this parameter value
                        var parameterValue = Build(parameterInfo.ParameterType, parameterInfo.Name, null);

                        parameters.Add(parameterValue);
                    }

                    item = typeCreator.Create(type, referenceName, buildChain, parameters.ToArray());
                }
            }
            else
            {
                // The type creator is going to be solely responsible for creating this instance
                item = typeCreator.Create(type, referenceName, buildChain);
            }

            return item;
        }