private object ResolveArgument(DefaultNode toCreate, IUnresolvedArgument argument) { switch (argument.ArgumentType) { case UnresolvedArgumentType.Type: if (argument.IsMultipleResult) { var value = (Array)Activator.CreateInstance(argument.MultipleResultElementType.MakeArrayType(), new object[] { argument.PlannedTargets.Length }); for (int index = 0; index < argument.PlannedTargets.Length; index++) { var target = argument.PlannedTargets[index]; if (target.Planned) { throw new ActivationException( "Expected " + target.FullName + " to be resolved by now.", toCreate); } value.SetValue(((DefaultNode)target).UntypedValue, index); } return(value); } else { if (argument.PlannedTarget.Planned) { if (argument.IsOptional) { return(null); } else { throw new ActivationException( "Expected " + argument.PlannedTarget.FullName + " to be resolved by now.", toCreate); } } return(((DefaultNode)argument.PlannedTarget).UntypedValue); } case UnresolvedArgumentType.Factory: return(argument.FactoryDelegate); case UnresolvedArgumentType.FactoryArgument: return(argument.FactoryArgumentValue); case UnresolvedArgumentType.CurrentNode: return(argument.CurrentNode); case UnresolvedArgumentType.KnownValue: return(argument.KnownValue); } throw new ActivationException("Unexpected argument type", toCreate); }
private void ValidateArgument(IUnresolvedArgument argument, IPlan target) { if (argument.InjectionParameters.OfType <OptionalAttribute>().Any()) { // Optional arguments are always valid, because the result will // simply be null when injected. return; } if (!target.Valid) { throw new ActivationException("The planned node is not valid (hint: " + target.InvalidHint + ")", target); } }
private static string GetDebugRepresentation(IUnresolvedArgument current, string indent) { indent = indent ?? string.Empty; if (current == null) { return string.Empty; } var me = (indent + "- " + current.Name).TrimEnd(); me += " (" + current.ArgumentType + ")"; if (current.UnresolvedType != null) { me += " (" + current.UnresolvedType.FullName + ")"; } if (current.PlannedTarget != null) { me += " -> " + current.PlannedTarget.FullName; } me += Environment.NewLine; return me; }
private static string GetDebugRepresentation(IUnresolvedArgument current, string indent) { indent = indent ?? string.Empty; if (current == null) { return string.Empty; } var me = (indent + "- " + current.ParameterName).TrimEnd(); me += " (" + current.ArgumentType + ")"; if (current.UnresolvedType != null) { me += " (" + current.UnresolvedType.FullName + ")"; } if (current.PlannedTarget != null) { me += " -> " + current.PlannedTarget.FullName; } me += Environment.NewLine; return me; }
private object ResolveArgument(DefaultNode toCreate, IUnresolvedArgument argument) #endif { switch (argument.ArgumentType) { case UnresolvedArgumentType.Type: if (argument.IsMultipleResult) { #if !PLATFORM_UNITY var value = (Array)Activator.CreateInstance(argument.MultipleResultElementType.MakeArrayType(), new object[] { argument.PlannedTargets.Length }); for (int index = 0; index < argument.PlannedTargets.Length; index++) #else var value = (Array)Activator.CreateInstance(argument.MultipleResultElementType.MakeArrayType(), new object[] { argument.PlannedTargets.Count }); for (int index = 0; index < argument.PlannedTargets.Count; index++) #endif { var target = argument.PlannedTargets[index]; while (target.Deferred && target.DeferredResolvedTarget != null) { target = target.DeferredResolvedTarget; } if (target.Planned) { throw new ActivationException( "Expected " + target.FullName + " to be resolved by now.", toCreate); } value.SetValue(((DefaultNode)target).UntypedValue, index); } return(value); } else { var target = argument.PlannedTarget; while (target.Deferred && target.DeferredResolvedTarget != null) { target = target.DeferredResolvedTarget; } if (target.Planned) { if (argument.InjectionParameters.OfType <OptionalAttribute>().Any()) { return(null); } else { throw new ActivationException( "Expected " + target.FullName + " to be resolved by now.", toCreate); } } return(((DefaultNode)target).UntypedValue); } case UnresolvedArgumentType.Factory: return(argument.FactoryDelegate); case UnresolvedArgumentType.FactoryArgument: return(argument.FactoryArgumentValue); case UnresolvedArgumentType.CurrentNode: return(argument.CurrentNode); case UnresolvedArgumentType.Node: return(argument.Node); case UnresolvedArgumentType.Hierarchy: return(argument.Hierarchy); case UnresolvedArgumentType.KnownValue: return(argument.KnownValue); } throw new ActivationException("Unexpected argument type", toCreate); }
private async Task <object> ResolveArgument(DefaultNode toCreate, IUnresolvedArgument argument)