private static bool ActualOrDefaultParamValue( ParameterInfo parameter, ref VisualTreeRunContext context, [NotNullWhen(true)] out IFactory?result) { result = parameter switch { var p when HasFromServiceAttribute(p) => new DiFactory(parameter), var p when ResolveParameter(p.ParameterType, ref context, out var r) => r, var p when p.HasDefaultValue => new ConstantFactory(p.DefaultValue), _ => null }; return(result != null); }
public static ResolvedParameters?Resolve(ParameterInfo[] parameters, ref VisualTreeRunContext context) { var ret = new ResolvedParameters(parameters.Length); for (int i = 0; i < parameters.Length; i++) { if (!ActualOrDefaultParamValue(parameters[i], ref context, out var actualVal)) { return(null); } ret.Put(i, actualVal); } return(ret); }
public void InvokeFactoryTest() { var fact = new Mock <IFactory>(); var inputParams = new object[] { new EventArgs() }; var par = new FrameworkElement(); par.DataContext = fact.Object; fact.SetupGet(i => i.TargetType).Returns(typeof(string)); fact.Setup(i => i.Create(It.IsAny <IDIIntegration>(), par, inputParams)).Returns("FooBar"); var context = new VisualTreeRunContext(new EmptyScopeFactory(), par, "", inputParams); Assert.True(ParameterResolver.ResolveParameter(typeof(string), ref context, out var result)); Assert.Equal("FooBar", result.Create(null, par, inputParams).ToString()); }
public static bool ResolveParameter( Type parameterType, ref VisualTreeRunContext context, [NotNullWhen(true)] out IFactory?result) { foreach (var candidate in context.AllParameterPossibilities()) { if (candidate is IFactory fact && parameterType.IsAssignableFrom(fact.TargetType)) { result = fact; return(true); } if (parameterType.IsInstanceOfType(candidate)) { result = new ConstantFactory(candidate); return(true); } } result = null; return(false); }