Example #1
0
        public void WriteExpressions(LambdaDefinition definition)
        {
            var scope        = definition.Scope();
            var closedMethod = _openMethod.MakeGenericMethod(_serviceType);
            var expr         = definition.ExpressionFor(Variable);

            var call   = Expression.Call(scope, closedMethod);
            var assign = Expression.Assign(expr, call);

            definition.Body.Add(assign);


            if (Next == null)
            {
                definition.Body.Add(expr);
            }
            else if (Next is IResolverFrame next)
            {
                next.WriteExpressions(definition);
            }
            else
            {
                throw new InvalidCastException($"{Next.GetType().FullNameInCode()} does not implement {nameof(IResolverFrame)}");
            }
        }
Example #2
0
        public void WriteExpressions(LambdaDefinition definition)
        {
            var scope        = definition.Scope();
            var variableExpr = Expression.Variable(Variable.VariableType, Variable.Usage);

            definition.RegisterExpression(Variable, variableExpr);

            var invokeMethod = _setter.InitialValue.GetType().GetMethod("Invoke");
            var invoke       = Expression.Call(Expression.Constant(_setter.InitialValue), invokeMethod, scope);

            Expression cast = invoke;

            if (!variableExpr.Type.IsAssignableFrom(invoke.Type))
            {
                cast = Expression.Convert(invoke, variableExpr.Type);
            }

            definition.Body.Add(Expression.Assign(variableExpr, cast));

            if (!Variable.VariableType.IsValueType)
            {
                definition.TryRegisterDisposable(variableExpr);
            }


            if (Next is IResolverFrame next)
            {
                next.WriteExpressions(definition);
            }
            else
            {
                throw new InvalidCastException($"{Next.GetType().FullNameInCode()} does not implement {nameof(IResolverFrame)}");
            }
        }
Example #3
0
        public void WriteExpressions(LambdaDefinition definition)
        {
            var scope = definition.Scope();
            var expr  = definition.ExpressionFor(Variable);

            var instance = Variable.Instance;

            var @call  = Expression.Call(Expression.Constant(instance), _resolveMethod, scope);
            var assign = Expression.Assign(expr, Expression.Convert(@call, Variable.VariableType));

            definition.Body.Add(assign);

            if (Next is IResolverFrame next)
            {
                next.WriteExpressions(definition);
            }
            else
            {
                throw new InvalidCastException($"{Next.GetType().GetFullName()} does not implement {nameof(IResolverFrame)}");
            }
        }