Exemplo n.º 1
0
        private Func <object> Prepare(IEnumerable <Parameter> parameters)
        {
            if (_componentRegistration.Sharing == InstanceSharing.None || parameters.Any())
            {
                return(Activate(_scope, parameters, true));
            }
            bool firstInstance = false;
            var  instance      =
                _activationScope.GetOrCreateAndShare(
                    _componentRegistration.Id,
                    () =>
            {
                firstInstance = true;
                return(Activate(_activationScope, parameters, false)());
            });

            if (firstInstance)
            {
                _componentRegistration.RaiseActivated(_service, _scope, parameters, instance);
                var ev = SharedInstanceActivation;
                if (ev != null)
                {
                    ev(instance, EventArgs.Empty);
                }
            }
            return(() => instance);
        }
Exemplo n.º 2
0
        public object Execute()
        {
            if (_executed)
            {
                throw new InvalidOperationException(ComponentActivationResources.ActivationAlreadyExecuted);
            }

            _executed = true;

            object instance;

            if (_componentRegistration.Sharing == InstanceSharing.None)
            {
                instance = Activate(Parameters);
            }
            else
            {
                instance = _activationScope.GetOrCreateAndShare(_componentRegistration.Id, () => Activate(Parameters));
            }

            var handler = InstanceLookupEnding;

            if (handler != null)
            {
                handler(this, new InstanceLookupEndingEventArgs(this, NewInstanceActivated));
            }

            return(instance);
        }
Exemplo n.º 3
0
        public object Resolve()
        {
            var instance = _component.Sharing == InstanceSharing.None ?
                           Activiator() :
                           _scope.GetOrCreateAndShare(_component.Id, Activiator);

            if (instance is IDisposable disposable)
            {
                _scope.Disposer.AddInstanceForDisposal(disposable);
            }

            return(instance);
        }
Exemplo n.º 4
0
        public object Execute()
        {
            if (_executed)
            {
                throw new InvalidOperationException(ComponentActivationResources.ActivationAlreadyExecuted);
            }

            _executed = true;

            object instance = ComponentRegistration.Sharing == InstanceSharing.None
                ? Activate(Parameters)
                : _activationScope.GetOrCreateAndShare(ComponentRegistration.Id, () => Activate(Parameters));

            var handler = InstanceLookupEnding;

            handler?.Invoke(this, new InstanceLookupEndingEventArgs(this, NewInstanceActivated));

            return(instance);
        }
Exemplo n.º 5
0
        public object Execute()
        {
            if (_executed)
            {
                throw new InvalidOperationException(string.Format(CultureInfo.CurrentCulture, ComponentActivationResources.ActivationAlreadyExecuted, this.ComponentRegistration));
            }

            _executed = true;

            object?decoratorTarget = null;
            object instance        = ComponentRegistration.Sharing == InstanceSharing.None
                ? Activate(Parameters, out decoratorTarget)
                : _activationScope.GetOrCreateAndShare(ComponentRegistration.Id, () => Activate(Parameters, out decoratorTarget));

            var handler = InstanceLookupEnding;

            handler?.Invoke(this, new InstanceLookupEndingEventArgs(this, NewInstanceActivated));

            StartStartableComponent(decoratorTarget);

            return(instance);
        }