/// <summary> /// Default constructor /// </summary> /// <param name="strategy"></param> /// <param name="activationType"></param> /// <param name="lifestyle"></param> public WrapperActivationPathNode(IWrapperOrExportActivationStrategy strategy, Type activationType, ICompiledLifestyle lifestyle) { Strategy = strategy; ActivationType = activationType; Lifestyle = lifestyle; }
public void ConfigurableActivationStrategyDebuggerView_Lifestyle(ConfigurableActivationStrategyDebuggerView debuggerView, IConfigurableActivationStrategy strategy, ICompiledLifestyle lifestyle) { strategy.Lifestyle.Returns(lifestyle); Assert.Same(lifestyle, debuggerView.Lifestyle); }
/// <summary> /// Use custom lifestyle /// </summary> /// <param name="lifestyle"></param> /// <returns></returns> public T Custom(ICompiledLifestyle lifestyle) { if (lifestyle != null) { _addLifestyle(lifestyle); } return(_returnValue); }
/// <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)); }
/// <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) { var activationType = request.ActivationType; var closedType = ReflectionHelper.CreateClosedExportTypeFromRequestingType(ActivationType, activationType); var configuration = GetActivationConfiguration(closedType); return(_builder.GetActivationExpression(scope, request, configuration, lifestyle)); }
/// <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) { var replacer = new LocateExpressionReplacer(request, this); var result = replacer.Replace(_expression); var funcExpression = (Expression <Func <T> >)result.Expression; result.Expression = funcExpression.Body; return(result); }
/// <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> /// Get an activation expression for this strategy /// </summary> /// <param name="scope"></param> /// <param name="request"></param> /// <param name="lifestyle"></param> /// <returns></returns> public abstract IActivationExpressionResult GetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle);
/// <summary> /// Assign a custom lifestyle to an export /// </summary> /// <param name="lifestyle"></param> /// <returns>configuraiton object</returns> public IFluentExportStrategyConfiguration UsingLifestyle(ICompiledLifestyle lifestyle) { return(_strategy.Lifestyle.Custom(lifestyle)); }
/// <inheritdoc /> protected override IActivationExpressionResult CreateExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle) { if (_proxyType == null) { lock (_proxyTypeLock) { if (_proxyType == null) { var builder = new DynamicTypeBuilder(); _proxyType = builder.CreateType(ActivationType, out _delegateInfo); } } } request.RequireExportScope(); request.RequireDisposalScope(); request.RequireInjectionContext(); var parameters = new List <Expression> { request.ScopeParameter, request.DisposalScopeExpression, request.InjectionContextParameter }; var uniqueId = UniqueStringId.Generate(); foreach (var delegateInfo in _delegateInfo) { var locateType = delegateInfo.Method.ReturnType; var newRequest = request.NewRequest(locateType, this, ActivationType, RequestType.Other, null, true); newRequest.AddKnownValueExpression( CreateKnownValueExpression(newRequest, ActivationType, uniqueId)); if (delegateInfo.Method.Name.StartsWith("Get")) { newRequest.SetLocateKey(delegateInfo.Method.Name.Substring("Get".Length)); } if (delegateInfo.ParameterInfos != null) { foreach (var parameter in delegateInfo.ParameterInfos) { newRequest.AddKnownValueExpression( CreateKnownValueExpression(newRequest, parameter.ParameterInfo.ParameterType, parameter.UniqueId, parameter.ParameterInfo.Name, parameter.ParameterInfo.Position)); } } var result = request.Services.ExpressionBuilder.GetActivationExpression(request.RequestingScope, newRequest); var compiledDelegate = request.Services.Compiler.CompileDelegate(request.RequestingScope, result); parameters.Add(Expression.Constant(compiledDelegate)); } var constructor = _proxyType.GetTypeInfo().DeclaredConstructors.First(); request.RequireInjectionContext(); var newStatement = Expression.New(constructor, parameters); var setMethod = typeof(IExtraDataContainer).GetRuntimeMethod(nameof(IExtraDataContainer.SetExtraData), new[] { typeof(object), typeof(object), typeof(bool) }); var invokeStatement = Expression.Call(request.InjectionContextParameter, setMethod, Expression.Constant(uniqueId), newStatement, Expression.Constant(true)); var castStatement = Expression.Convert(invokeStatement, ActivationType); return(request.Services.Compiler.CreateNewResult(request, castStatement)); }
/// <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) { return(_builder.GetActivationExpression(scope, request, ActivationConfiguration, lifestyle)); }
/// <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 abstract IActivationExpressionResult CreateExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle);
/// <summary> /// Get an activation expression for this strategy /// </summary> /// <param name="scope"></param> /// <param name="request"></param> /// <param name="lifestyle"></param> /// <returns></returns> public override IActivationExpressionResult GetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle) { throw new NotSupportedException("Decorators on collection is not supported at this time"); }
/// <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))); }
public override IActivationExpressionResult GetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle) { throw new NotImplementedException(); }
/// <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) { return(GetExpressionFromDependentStrategy(scope, request)); }
/// <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) { return(CreateExpression(scope, request, lifestyle)); }
/// <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) { throw new NotSupportedException("Decorators not currently supported on KeyedLocateDelegate<,>"); }
/// <summary> /// Set a particular life style /// </summary> /// <param name="lifestyle">lifestyle</param> /// <returns>configuration object</returns> public IExportTypeSetConfiguration UsingLifestyle(ICompiledLifestyle lifestyle) { return(UsingLifestyle(type => lifestyle?.Clone())); }
/// <summary> /// Assign a custom lifestyle to an export /// </summary> /// <param name="lifestyle"></param> /// <returns>configuraiton object</returns> public IFluentExportStrategyConfiguration UsingLifestyle(ICompiledLifestyle lifestyle) { _exportConfiguration.Lifestyle = lifestyle; return(this); }
/// <summary> /// Export using a specific lifestyle /// </summary> /// <param name="lifestyle">lifestlye to use</param> /// <returns>configuration object</returns> public IFluentExportInstanceConfiguration <T> UsingLifestyle(ICompiledLifestyle lifestyle) { _exportConfiguration.Lifestyle = lifestyle; return(this); }
/// <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) { throw new NotSupportedException(); }
/// <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) { throw new NotSupportedException("THis strategy type does not support decorators"); }
/// <summary> /// Get an activation expression for this strategy /// </summary> /// <param name="scope"></param> /// <param name="request"></param> /// <param name="lifestyle"></param> /// <returns></returns> public override IActivationExpressionResult GetDecoratorActivationExpression(IInjectionScope scope, IActivationExpressionRequest request, ICompiledLifestyle lifestyle) { // not sure why you would want to decorate the Option<> it self as you can decorate the T throw new NotSupportedException(); }