Пример #1
0
        /// <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));
 }
Пример #3
0
        /// <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)));
        }