Exemple #1
0
        public override void GenerateCode(GeneratedMethod method, ISourceWriter writer)
        {
            var arguments = _arguments.Select(x => x.Usage).Join(", ");
            var implementationTypeName = ImplementationType.FullName.Replace("+", ".");

            var declaration = $"var {Variable.Usage} = new {implementationTypeName}({arguments})";

            if (IsDisposable)
            {
                if (Next is ConstructorFrame && Next.As <ConstructorFrame>().IsDisposable)
                {
                    writer.Write($"using ({declaration})");
                    Next?.GenerateCode(method, writer);
                }
                else
                {
                    writer.UsingBlock(declaration, w => Next?.GenerateCode(method, w));
                }
            }
            else
            {
                writer.Write(declaration + ";");
                Next?.GenerateCode(method, writer);
            }
        }
Exemple #2
0
        public void WriteExpressions(LambdaDefinition definition)
        {
            var variableExpr = definition.RegisterExpression(Variable);

            definition.Body.Add(Expression.Assign(variableExpr, Expression.Convert(definition.ExpressionFor(_scope), Variable.VariableType)));

            Next?.As <IResolverFrame>().WriteExpressions(definition);
        }
Exemple #3
0
        protected IConfiguredInstance toInstance()
        {
            var instance = buildInstance();

            if (Next != null)
            {
                var next = Next.As <IContainerModel>().ToInstance();
                instance.Dependencies.Add(typeof(IActionBehavior), next);
            }

            return(instance);
        }
Exemple #4
0
        protected ObjectDef toObjectDef()
        {
            ObjectDef objectDef = buildObjectDef();

            if (Next != null)
            {
                var nextObjectDef = Next.As <IContainerModel>().ToObjectDef();
                objectDef.DependencyByType <IActionBehavior>(nextObjectDef);
            }

            return(objectDef);
        }
Exemple #5
0
        public override void GenerateCode(GeneratedMethod method, ISourceWriter writer)
        {
            var arguments = _arguments.Select(x => x.Usage).Join(", ");
            var implementationTypeName = _implementationType.FullNameInCode();

            if (ReturnCreated)
            {
                writer.Write($"return new {implementationTypeName}({arguments});");
                Next?.GenerateCode(method, writer);
                return;
            }

            var declaration = $"var {Variable.Usage} = new {implementationTypeName}({arguments})";

            switch (Disposal)
            {
            case DisposeTracking.None:
                writer.Write(declaration + ";");
                Next?.GenerateCode(method, writer);
                break;

            case DisposeTracking.WithUsing:
                if (Next is ConstructorFrame && Next.As <ConstructorFrame>().Disposal == DisposeTracking.WithUsing)
                {
                    writer.Write($"using ({declaration})");
                    Next?.GenerateCode(method, writer);
                }
                else
                {
                    writer.UsingBlock(declaration, w => Next?.GenerateCode(method, w));
                }

                break;

            case DisposeTracking.RegisterWithScope:
                writer.Write(declaration + ";");
                writer.Write($"{_scope.Usage}.{nameof(Scope.TryAddDisposable)}({Variable.Usage});");
                Next?.GenerateCode(method, writer);
                break;
            }
        }
        private void attachNextBehavior(ObjectDef objectDef)
        {
            var nextObjectDef = Next.As <IContainerModel>().ToObjectDef();

            objectDef.DependencyByType <IActionBehavior>(nextObjectDef);
        }