Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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());
        }
Ejemplo n.º 4
0
        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);
        }