Exemple #1
0
        public override PipelineResult Execute(Type requestedType, PipelineResult value)
        {
            if (value != null && value.Result != null)
            {
                return(value);
            }

            var result = new PipelineResult();
            var type   = requestedType;

            if (serviceLocator.HasTypeRegistered(type) || type.IsGenericType)
            {
                result.Name       = value == null ? null : value.Name;
                result.MappedFrom = requestedType;
                result.MappedTo   = type;

                var items = store.Get <IResolutionStore>().Items;

                if (result.Name == null)
                {
                    result.Result = serviceLocator.GetInstance(type, items.OfType <ConstructorParameter, IResolutionArgument>());
                }
                else
                {
                    result.Result = serviceLocator.GetInstance(type, result.Name, items.OfType <ConstructorParameter, IResolutionArgument>());
                }

                result = pipeline.Execute(result);

                return(result);
            }

            return(null);
        }
        protected override Func <PipelineResult> Invoker(Type type, PipelineResult value)
        {
            return(() =>
            {
                if (value != null && value.Result != null)
                {
                    return value;
                }

                var result = new PipelineResult();
                IList <IRegistration> conditionalCases = registrationStore.GetRegistrationsForType(type);

                if (conditionalCases == null)
                {
                    return null;
                }

                for (int i = 0; i < conditionalCases.Count; i++)
                {
                    var registration = conditionalCases[i];

                    if (registration.IsValid(serviceLocator, store))
                    {
                        var mappedToType = registration.GetMappedToType();
                        if (TypeRequested != null)
                        {
                            TypeRequested(mappedToType);
                        }

                        result.Name = registration is INamedRegistration
                                          ? ((INamedRegistration)registration).Key
                                          : null;
                        result.MappedTo = mappedToType;
                        result.MappedFrom = registration.GetMappedFromType();
                        result.Result = Resolve(registration);

                        if (result.Result != null && TypeResolved != null)
                        {
                            TypeResolved(type);
                        }

                        if (result.Result != null)
                        {
                            result = pipeline.Execute(result);
                        }
                        return result;
                    }
                }

                return null;
            });
        }
Exemple #3
0
        public virtual object ResolveWith(IInstanceResolver locator, IServiceLocatorStore context, PostResolutionPipeline pipeline)
        {
            object instance = null;

            instance = GetActivationStrategy().Resolve(locator, context);

            if(pipeline != null)
            {
                var result = GetResult(instance);

                pipeline.Execute(result);
            }

            return instance;
        }
Exemple #4
0
        protected override Func <PipelineResult> Invoker(Type type, PipelineResult value)
        {
            return(() =>
            {
                if (value != null && value.Result != null)
                {
                    return value;
                }

                var result = new PipelineResult();

                var registrations = registrationStore.GetRegistrationsForType(type);

                if (registrations == null)
                {
                    return null;
                }

                var mappedToType = registrations[0].GetMappedToType();
                if (TypeRequested != null)
                {
                    TypeRequested(mappedToType);
                }

                result.Name = registrations[0] is INamedRegistration
                                  ? ((INamedRegistration)registrations[0]).Key
                                  : null;
                result.MappedTo = mappedToType;
                result.MappedFrom = registrations[0].GetMappedFromType();
                result.Result = Resolve(registrations[0]);

                if (result.Result != null)
                {
                    result = pipeline.Execute(result);
                }

                if (result.Result != null && TypeResolved != null)
                {
                    TypeResolved(type);
                }

                return result;
            });
        }