Ejemplo n.º 1
0
        /// <summary>
        /// Get an activation strategy for this delegate
        /// </summary>
        /// <param name="scope">injection scope</param>
        /// <param name="compiler"></param>
        /// <param name="activationType">activation type</param>
        /// <returns>activation delegate</returns>
        public ActivationStrategyDelegate GetActivationStrategyDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler,
                                                                        Type activationType)
        {
            var request = GetActivationExpression(scope, compiler.CreateNewRequest(activationType, 1, scope));

            return(compiler.CompileDelegate(scope, request));
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Get an activation strategy for this delegate
        /// </summary>
        /// <param name="scope">injection scope</param>
        /// <param name="compiler"></param>
        /// <param name="activationType">activation type</param>
        /// <returns>activation delegate</returns>
        public ActivationStrategyDelegate GetActivationStrategyDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler,
                                                                        Type activationType)
        {
            var objectDelegate = _delegates.GetValueOrDefault(activationType);

            if (objectDelegate != null)
            {
                return(objectDelegate);
            }

            var request = compiler.CreateNewRequest(activationType, 1, scope);

            var expression = GetActivationExpression(scope, request);

            if (expression == null)
            {
                return(null);
            }

            objectDelegate = compiler.CompileDelegate(scope, expression);

            ImmutableHashTree.ThreadSafeAdd(ref _delegates, activationType, objectDelegate);

            return(objectDelegate);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Compiles delegate
        /// </summary>
        /// <param name="scope"></param>
        /// <param name="compiler"></param>
        /// <param name="activationType"></param>
        /// <returns></returns>
        protected override ActivationStrategyDelegate CompileDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler,
                                                                      Type activationType)
        {
            var request = compiler.CreateNewRequest(activationType, 1, scope);

            var expressionResult = request.Services.ExpressionBuilder.GetActivationExpression(scope, request);

            return(compiler.CompileDelegate(scope, expressionResult));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Compile a delegate
        /// </summary>
        /// <param name="scope">scope</param>
        /// <param name="compiler">compiler</param>
        /// <param name="activationType">activation type</param>
        /// <returns></returns>
        protected virtual ActivationStrategyDelegate CompileDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler,
                                                                     Type activationType)
        {
            var request = compiler.CreateNewRequest(activationType, 1, scope);

            var expressionResult = GetActivationExpression(scope, request);

            ActivationStrategyDelegate returnValue = null;

            if (expressionResult != null)
            {
                returnValue = compiler.CompileDelegate(scope, expressionResult);
            }

            return(returnValue);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Get an activation strategy for this delegate
        /// </summary>
        /// <param name="scope">injection scope</param>
        /// <param name="compiler"></param>
        /// <param name="activationType">activation type</param>
        /// <returns>activation delegate</returns>
        public ActivationStrategyDelegate GetActivationStrategyDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler,
                                                                        Type activationType)
        {
            if (_delegate != null)
            {
                return(_delegate);
            }

            var request = GetActivationExpression(scope, compiler.CreateNewRequest(activationType, 1, scope));

            var compiledDelegate = compiler.CompileDelegate(scope, request);

            Interlocked.CompareExchange(ref _delegate, compiledDelegate, null);

            return(_delegate);
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Get an activation strategy for this delegate
        /// </summary>
        /// <param name="scope">injection scope</param>
        /// <param name="compiler"></param>
        /// <param name="activationType">activation type</param>
        /// <returns>activation delegate</returns>
        public ActivationStrategyDelegate GetActivationStrategyDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler, Type activationType)
        {
            if (_delegate != null)
            {
                return(_delegate);
            }

            scope.ScopeConfiguration.Trace?.Invoke($"Activating {ActivationType.FullName} with lifestyle '{Lifestyle}' for request type {activationType.FullName}");

            var request = GetActivationExpression(scope, compiler.CreateNewRequest(activationType, 1, scope));

            var compiledDelegate = compiler.CompileDelegate(scope, request);

            Interlocked.CompareExchange(ref _delegate, compiledDelegate, null);

            return(_delegate);
        }
        /// <summary>
        /// Get an activation strategy for this delegate
        /// </summary>
        /// <param name="scope">injection scope</param>
        /// <param name="compiler"></param>
        /// <param name="activationType">activation type</param>
        /// <returns>activation delegate</returns>
        public virtual ActivationStrategyDelegate GetActivationStrategyDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler, Type activationType)
        {
            if (StrategyDelegate != null)
            {
                return(StrategyDelegate);
            }

            var request = compiler.CreateNewRequest(activationType, 1, scope);

            var expression = GetActivationExpression(scope, request);

            var newDelegate = compiler.CompileDelegate(scope, expression);

            Interlocked.CompareExchange(ref StrategyDelegate, newDelegate, null);

            return(StrategyDelegate);
        }
        /// <summary>
        /// Compile a delegate
        /// </summary>
        /// <param name="scope">scope</param>
        /// <param name="compiler">compiler</param>
        /// <param name="activationType">activation type</param>
        /// <returns></returns>
        protected override ActivationStrategyDelegate CompileDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler,
                                                                      Type activationType)
        {
            var request = compiler.CreateNewRequest(activationType, 1, scope);

            if (!_wrapperExpressionCreator.SetupWrappersForRequest(scope, request))
            {
                throw new LocateException(request.GetStaticInjectionContext(), "Could not calculate wrapper");
            }

            var expressionResult = GetActivationExpression(scope, request);

            ActivationStrategyDelegate returnValue = null;

            if (expressionResult != null)
            {
                returnValue = compiler.CompileDelegate(scope, expressionResult);
            }

            return(returnValue);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Compile a delegate
        /// </summary>
        /// <param name="scope">scope</param>
        /// <param name="compiler">compiler</param>
        /// <param name="pair">Pair of activation type and locate key.</param>
        /// <returns></returns>
        protected virtual ActivationStrategyDelegate CompileDelegate(
            IInjectionScope scope,
            IActivationStrategyCompiler compiler,
            Tuple <Type, object> pair)
        {
            var request = compiler.CreateNewRequest(pair.Item1, 1, scope);

            if (pair.Item2 != null)
            {
                request.SetLocateKey(pair.Item2);
            }

            var expressionResult = GetActivationExpression(scope, request);

            ActivationStrategyDelegate returnValue = null;

            if (expressionResult != null)
            {
                returnValue = compiler.CompileDelegate(scope, expressionResult);
            }

            return(returnValue);
        }