Esempio n. 1
0
 public ActivationStrategyDelegate GetActivationStrategyDelegate(
     IInjectionScope scope,
     IActivationStrategyCompiler compiler,
     Type activationType,
     object key)
 {
     throw new NotImplementedException();
 }
Esempio n. 2
0
 /// <summary>
 /// Default constructor
 /// </summary>
 /// <param name="compiler"></param>
 /// <param name="expressionBuilder"></param>
 /// <param name="attributeDiscoveryService"></param>
 /// <param name="exportExpressionBuilder"></param>
 /// <param name="injectionContextCreator"></param>
 public ActivationServices(IActivationStrategyCompiler compiler,
                           IActivationExpressionBuilder expressionBuilder,
                           IAttributeDiscoveryService attributeDiscoveryService,
                           IDefaultStrategyExpressionBuilder exportExpressionBuilder,
                           IInjectionContextCreator injectionContextCreator)
 {
     Compiler                   = compiler;
     ExpressionBuilder          = expressionBuilder;
     LifestyleExpressionBuilder = exportExpressionBuilder;
     InjectionContextCreator    = injectionContextCreator;
     AttributeDiscoveryService  = attributeDiscoveryService;
 }
        /// <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);
        }
Esempio n. 4
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 returnValue = ActivationDelegates.GetValueOrDefault(activationType);

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

            returnValue = CompileDelegate(scope, compiler, activationType);

            if (returnValue != null)
            {
                returnValue = ImmutableHashTree.ThreadSafeAdd(ref ActivationDelegates, activationType, returnValue);
            }

            return(returnValue);
        }
Esempio 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>
        /// <param name="key">The locate key.</param>
        /// <returns>activation delegate</returns>
        public ActivationStrategyDelegate GetActivationStrategyDelegate(
            IInjectionScope scope, IActivationStrategyCompiler compiler, Type activationType, object key)
        {
            var pair        = new Tuple <Type, object>(activationType, key);
            var returnValue = ActivationDelegates.GetValueOrDefault(pair);

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

            returnValue = CompileDelegate(scope, compiler, pair);

            if (returnValue != null)
            {
                returnValue = ImmutableHashTree.ThreadSafeAdd(ref ActivationDelegates, pair, returnValue);
            }

            return(returnValue);
        }
Esempio n. 6
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);
        }
Esempio n. 7
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);
        }
Esempio n. 8
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);
        }
Esempio n. 9
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)
 {
     return(_delegate);
 }
Esempio n. 10
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));
        }
        /// <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);
        }
Esempio n. 12
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);
        }
Esempio n. 13
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));
        }
Esempio n. 14
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)
 => GetActivationStrategyDelegate(scope, compiler, activationType, null);
        /// <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);
        }