/// <summary> /// Get an activation expression for this strategy /// </summary> /// <param name="scope"></param> /// <param name="request"></param> /// <param name="lifestyle"></param> /// <returns></returns> public IActivationExpressionResult GetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle) { if (lifestyle == null) { return(InternalGetDecoratorActivationExpression(scope, request)); } if (ApplyAfterLifestyle) { return(lifestyle.ProvideLifestyleExpression( scope, request, lifestyleRequest => InternalGetDecoratorActivationExpression(scope, lifestyleRequest))); } return(lifestyle.ProvideLifestyleExpression( scope, request, lifestyleRequest => InternalGetDecoratorActivationExpression(scope, request))); }
/// <summary> /// Create expression that is implemented in child class /// </summary> /// <param name="scope"></param> /// <param name="request"></param> /// <param name="lifestyle"></param> /// <returns></returns> protected override IActivationExpressionResult CreateExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle) { if (lifestyle == null) { return(CreateExpression(request)); } return(lifestyle.ProvideLifestyleExpression(scope, request, CreateExpression)); }
/// <summary> /// Provide an expression that uses the lifestyle /// </summary> /// <param name="scope">scope for the strategy</param> /// <param name="request">activation request</param> /// <param name="activationExpression">expression to create strategy type</param> /// <returns></returns> public IActivationExpressionResult ProvideLifestyleExpression(IInjectionScope scope, IActivationExpressionRequest request, Func <IActivationExpressionRequest, IActivationExpressionResult> activationExpression) { if (_compiledLifestyle != null) { return(_compiledLifestyle.ProvideLifestyleExpression(scope, request, activationExpression)); } IPerRequestLifestyleProvider provider; var lifestyle = scope.TryLocate(out provider) ? provider.ProvideLifestyle() : new SingletonPerScopeLifestyle(false); Interlocked.CompareExchange(ref _compiledLifestyle, lifestyle, null); return(_compiledLifestyle.ProvideLifestyleExpression(scope, request, activationExpression)); }
/// <summary> /// Get activation expression for type configuration /// </summary> /// <param name="scope">scope</param> /// <param name="request">request</param> /// <param name="activationConfiguration">activation configuration</param> /// <param name="lifestyle">lifestyle</param> /// <returns></returns> public IActivationExpressionResult GetActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, TypeActivationConfiguration activationConfiguration, ICompiledLifestyle lifestyle) { if (lifestyle == null) { return(TypeExpressionBuilder.GetActivationExpression(scope, request, activationConfiguration)); } return(lifestyle.ProvideLifestyleExpression(scope, request, lifestyleRequest => TypeExpressionBuilder.GetActivationExpression(scope, lifestyleRequest, activationConfiguration))); }