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); } }
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); }
protected IConfiguredInstance toInstance() { var instance = buildInstance(); if (Next != null) { var next = Next.As <IContainerModel>().ToInstance(); instance.Dependencies.Add(typeof(IActionBehavior), next); } return(instance); }
protected ObjectDef toObjectDef() { ObjectDef objectDef = buildObjectDef(); if (Next != null) { var nextObjectDef = Next.As <IContainerModel>().ToObjectDef(); objectDef.DependencyByType <IActionBehavior>(nextObjectDef); } return(objectDef); }
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); }