コード例 #1
0
        public DecoratedInstance <TTarget> With <TDecorator>()
        {
            ContextEnrichmentHandler <TTarget> decorator = (ctx, t) =>
            {
                var pluginType = ctx.BuildStack.Current.RequestedType;

                ctx.RegisterDefault(pluginType, t);

                return(ctx.GetInstance <TDecorator>());
            };

            _instance.EnrichWith(decorator);

            return(new DecoratedInstance <TTarget>(_instance, decorator));
        }
コード例 #2
0
            public DecoratedInstance <T> AndThen <TDecorator>()
            {
                var previous = _decorator;
                ContextEnrichmentHandler <T> newDecorator = (ctx, t) =>
                {
                    var pluginType    = ctx.BuildStack.Current.RequestedType;
                    var innerInstance = previous(ctx, t);
                    ctx.RegisterDefault(pluginType, innerInstance);

                    return(ctx.GetInstance <TDecorator>());
                };

                _instance.EnrichWith(newDecorator);
                _decorator = newDecorator;

                return(this);
            }
コード例 #3
0
        public DecoratedInstance <TTarget> AndThen <TDecorator>()
        {
            //Must be captured as a local variable, otherwise the closure's decorator will
            //always be the outer-most decorator, causing a Stack Overflow.
            var previousDecorator = _decorator;

            ContextEnrichmentHandler <TTarget> newDecorator = (ctx, t) =>
            {
                var pluginType = ctx.BuildStack.Current.RequestedType;

                var innerInstance = previousDecorator(ctx, t);

                ctx.RegisterDefault(pluginType, innerInstance);

                return(ctx.GetInstance <TDecorator>());
            };

            _instance.EnrichWith(newDecorator);

            _decorator = newDecorator;

            return(this);
        }
コード例 #4
0
 public DecoratorHelper(SmartInstance <TTarget> instance)
 {
     _decorateCommand = e => instance.EnrichWith(e);
 }