private bool TryResolve(ConstructorInfo constructor, out Func <IServiceResolver, object> callSite) { callSite = null; var parameters = constructor.GetParameters(); var reflector = constructor.GetReflector(); if (parameters.Length == 0) { callSite = resolver => reflector.Invoke(); return(true); } var parameterResolvers = new Func <IServiceResolver, object> [parameters.Length]; for (var i = 0; i < parameters.Length; i++) { var parameter = parameters[i]; var serviceType = parameter.ParameterType; if (!_serviceTable.Contains(serviceType)) { if (!parameter.HasDefaultValue) { return(false); //throw new InvalidOperationException($"Cannot resolve parameter '{parameter.Name}:{parameter.ParameterType}' for '{constructor}'"); } var defaultValue = parameter.DefaultValue; parameterResolvers[i] = resolver => defaultValue; } else { parameterResolvers[i] = resolver => resolver.Resolve(serviceType); } } callSite = resolver => { var args = new object[parameterResolvers.Length]; for (var i = 0; i < args.Length; i++) { args[i] = parameterResolvers[i](resolver); } return(reflector.Invoke(args: args)); }; return(true); }