/// <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> /// 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> /// 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> /// 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> /// 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) { 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); }
/// <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); }