public ActivationStrategyDelegate GetActivationStrategyDelegate( IInjectionScope scope, IActivationStrategyCompiler compiler, Type activationType, object key) { throw new NotImplementedException(); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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 ActivationStrategyDelegate GetActivationStrategyDelegate(IInjectionScope scope, IActivationStrategyCompiler compiler, Type activationType) { 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 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); }
/// <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); }
/// <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)); }
/// <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); }