public object CreateInstance(IObjectResolver resolver, IReadOnlyList <IInjectParameter> parameters) { var parameterInfos = injectTypeInfo.InjectConstructor.ParameterInfos; var parameterValues = CappedArrayPool <object> .Shared8Limit.Rent(parameterInfos.Length); try { for (var i = 0; i < parameterInfos.Length; i++) { var parameterInfo = parameterInfos[i]; try { parameterValues[i] = resolver.ResolveOrParameter( parameterInfo.ParameterType, parameterInfo.Name, parameters); } catch (VContainerException ex) { throw new VContainerException(parameterInfo.ParameterType, $"Failed to resolve {injectTypeInfo.Type} : {ex.Message}"); } } var instance = injectTypeInfo.InjectConstructor.ConstructorInfo.Invoke(parameterValues); Inject(instance, resolver, parameters); return(instance); } finally { CappedArrayPool <object> .Shared8Limit.Return(parameterValues); } }
void InjectMethods(object obj, IObjectResolver resolver, IReadOnlyList <IInjectParameter> parameters) { if (injectTypeInfo.InjectMethods == null) { return; } foreach (var method in injectTypeInfo.InjectMethods) { var parameterInfos = method.ParameterInfos; var parameterValues = CappedArrayPool <object> .Shared8Limit.Rent(parameterInfos.Length); try { for (var i = 0; i < parameterInfos.Length; i++) { var parameterInfo = parameterInfos[i]; try { parameterValues[i] = resolver.ResolveOrParameter( parameterInfo.ParameterType, parameterInfo.Name, parameters); } catch (VContainerException ex) { throw new VContainerException(parameterInfo.ParameterType, $"Failed to resolve {injectTypeInfo.Type} : {ex.Message}"); } } method.MethodInfo.Invoke(obj, parameterValues); } finally { CappedArrayPool <object> .Shared8Limit.Return(parameterValues); } } }