private static void SetDefaultValue(ParameterInfo parameter, ConstructorParameterInfo parameterInfo, IActivationExpressionRequest newRequest) { try { if (parameterInfo?.DefaultValue != null) { newRequest.SetDefaultValue(new DefaultValueInformation { DefaultValue = parameterInfo.DefaultValue }); } else if (parameter.HasDefaultValue) { var defaultValue = parameter.DefaultValue; if (defaultValue == null && parameter.ParameterType.GetTypeInfo().IsValueType) { defaultValue = Activator.CreateInstance(parameter.ParameterType); } newRequest.SetDefaultValue(new DefaultValueInformation { DefaultValue = defaultValue }); } } catch (FormatException) when(parameter.ParameterType == typeof(DateTime)) { newRequest.SetDefaultValue(new DefaultValueInformation { DefaultValue = default(DateTime) }); } }
/// <summary> /// Get expression for parameter /// </summary> /// <param name="parameter"></param> /// <param name="parameterInfo"></param> /// <param name="injectionScope"></param> /// <param name="configuration"></param> /// <param name="request"></param> /// <returns></returns> protected virtual IActivationExpressionResult GetParameterExpression(ParameterInfo parameter, ConstructorParameterInfo parameterInfo, IInjectionScope injectionScope, TypeActivationConfiguration configuration, IActivationExpressionRequest request, out IActivationExpressionRequest newRequest) { if (parameterInfo?.ExportFunc != null) { newRequest = null; return(CallExportFunc(configuration.ActivationStrategy, parameter, parameterInfo, injectionScope, request, configuration.ExternallyOwned)); } newRequest = request.NewRequest(parameterInfo?.UseType ?? parameter.ParameterType, configuration.ActivationStrategy, configuration.ActivationType, RequestType.ConstructorParameter, parameter, true, true); if (parameterInfo?.LocateWithKey != null) { newRequest.SetLocateKey(parameterInfo.LocateWithKey); } else if (injectionScope.ScopeConfiguration.Behaviors.KeyedTypeSelector(parameter.ParameterType)) { newRequest.SetLocateKey(parameter.Name); } if (parameterInfo?.DefaultValue != null) { newRequest.SetDefaultValue(new DefaultValueInformation { DefaultValue = parameterInfo.DefaultValue }); } else if (parameter.HasDefaultValue) { newRequest.SetDefaultValue(new DefaultValueInformation { DefaultValue = parameter.DefaultValue }); } if (parameterInfo != null) { newRequest.IsDynamic = parameterInfo.IsDynamic; newRequest.SetIsRequired(parameterInfo.IsRequired.GetValueOrDefault(!parameter.IsOptional)); newRequest.SetFilter(parameterInfo.ExportStrategyFilter); newRequest.SetEnumerableComparer(parameterInfo.EnumerableComparer); } else { newRequest.SetIsRequired(!parameter.IsOptional); } return(newRequest.Services.ExpressionBuilder.GetActivationExpression(injectionScope, newRequest)); }