Beispiel #1
0
 /// <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;
 }
Beispiel #2
0
        public void ConfigurableActivationStrategyDebuggerView_Lifestyle(ConfigurableActivationStrategyDebuggerView debuggerView,
                                                                         IConfigurableActivationStrategy strategy,
                                                                         ICompiledLifestyle lifestyle)
        {
            strategy.Lifestyle.Returns(lifestyle);

            Assert.Same(lifestyle, debuggerView.Lifestyle);
        }
Beispiel #3
0
        /// <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));
 }
Beispiel #5
0
        /// <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));
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
        /// <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)));
        }
Beispiel #8
0
 /// <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);
Beispiel #9
0
 /// <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));
 }
Beispiel #10
0
        /// <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));
        }
Beispiel #11
0
 /// <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)));
        }
Beispiel #15
0
 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));
 }
Beispiel #18
0
 /// <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()));
 }
Beispiel #20
0
        /// <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);
        }
Beispiel #21
0
        /// <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);
        }
Beispiel #22
0
 /// <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();
 }
Beispiel #23
0
 /// <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");
 }
Beispiel #24
0
 /// <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();
 }