public bool TryBuildExpression(IBuildContext buildContext, ILifetime lifetime, out Expression baseExpression, out Exception error) { if (buildContext == null) { throw new ArgumentNullException(nameof(buildContext)); } try { baseExpression = _expression; if (_statements.Length > 0) { var thisVar = Expression.Variable(baseExpression.Type, "this"); baseExpression = Expression.Block( new[] { thisVar }, Expression.Assign(thisVar, baseExpression), Expression.Block(_statements), thisVar ); if (_isComplexType) { baseExpression = buildContext.ReplaceTypes(baseExpression); } baseExpression = buildContext.InjectDependencies(baseExpression, thisVar); } else { if (_isComplexType) { baseExpression = buildContext.ReplaceTypes(baseExpression); } baseExpression = buildContext.InjectDependencies(baseExpression); } baseExpression = buildContext.AddLifetime(baseExpression, lifetime); error = default(Exception); return(true); } catch (BuildExpressionException ex) { error = ex; baseExpression = default(Expression); return(false); } }