public object[] GetParameterValues(IServiceProvider provider) { for (var index = 0; index != _parameters.Length; index++) { if (_parameterValuesSet[index] == false) { var value = provider.GetService(_parameters[index].ParameterType); if (value == null) { if (!ParameterDefaultValue.TryGetDefaultValue(_parameters[index], out var defaultValue)) { throw new InvalidOperationException($"Unable to resolve service for type '{_parameters[index].ParameterType}' while attempting to activate '{_constructor.DeclaringType}'."); } else { _parameterValues[index] = defaultValue; } } else { _parameterValues[index] = value; } } } return(_parameterValues); }
public object CreateInstance(IServiceProvider provider) { for (var index = 0; index != _parameters.Length; index++) { if (_parameterValuesSet[index] == false) { var value = provider.GetService(_parameters[index].ParameterType); if (value == null) { if (!ParameterDefaultValue.TryGetDefaultValue(_parameters[index], out var defaultValue)) { throw new InvalidOperationException($"Unable to resolve service for type '{_parameters[index].ParameterType}' while attempting to activate '{_constructor.DeclaringType}'."); } else { _parameterValues[index] = defaultValue; } } else { _parameterValues[index] = value; } } } try { return(_constructor.Invoke(_parameterValues)); } catch (TargetInvocationException ex) { //ExceptionDispatchInfo.Capture(ex.InnerException).Throw(); // The above line will always throw, but the compiler requires we throw explicitly. throw ex; } }