protected override object VisitConstructor(ConstructorCallSite constructorCallSite, RuntimeResolverContext context) { object[] parameterValues; if (constructorCallSite.ParameterCallSites.Length == 0) { parameterValues = Array.Empty <object>(); } else { parameterValues = new object[constructorCallSite.ParameterCallSites.Length]; for (var index = 0; index < parameterValues.Length; index++) { parameterValues[index] = VisitCallSite(constructorCallSite.ParameterCallSites[index], context); } } try { return(constructorCallSite.ConstructorInfo.Invoke(parameterValues)); } catch (Exception ex) when(ex.InnerException != null) { ExceptionDispatchInfo.Capture(ex.InnerException).Throw(); // The above line will always throw, but the compiler requires we throw explicitly. throw; } }
protected override Type VisitConstructor(ConstructorCallSite constructorCallSite, CallSiteValidatorState state) { Type result = null; foreach (var parameterCallSite in constructorCallSite.ParameterCallSites) { var scoped = VisitCallSite(parameterCallSite, state); if (result == null) { result = scoped; } } return(result); }
protected abstract TResult VisitConstructor(ConstructorCallSite constructorCallSite, TArgument argument);