예제 #1
0
        // Protected Methods (2) 

        /// <summary>
        ///
        /// </summary>
        /// <see cref="ServiceLocatorBase.OnGetAllInstances(Type)" />
        protected override IEnumerable <object> OnGetAllInstances(Type serviceType)
        {
            InstanceFactoryBase factory = null;

            this.InvokeForFactoryLists(
                (singleList, multiList, args) =>
            {
                factory = multiList.FirstOrDefault(f => args.ServiceType
                                                   .Equals(f.SERVICE_TYPE));
            }, new
            {
                ServiceType = serviceType,
            });

            IEnumerable <object> result = null;

            if (factory == null)
            {
                var innerLoc = this.InnerLocator;
                if (innerLoc != null)
                {
                    result = innerLoc.GetAllInstances(serviceType);
                }
            }
            else
            {
                var seq = (IEnumerable)factory.DELEGATE
                          .Method
                          .Invoke(factory.DELEGATE
                                  .Target,
                                  new object[] { this });

                if (seq != null)
                {
                    result = seq as IEnumerable <object>;
                    if (result == null)
                    {
                        result = seq.Cast <object>();
                    }
                }
            }

            return(result);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <see cref="ServiceLocatorBase.OnGetInstance(Type, object)" />
        protected override object OnGetInstance(Type serviceType, object key)
        {
            InstanceFactoryBase factory = null;

            this.InvokeForFactoryLists(
                (singleList, multiList, args) =>
            {
                factory = singleList.FirstOrDefault(f => args.ServiceType
                                                    .Equals(f.SERVICE_TYPE));
            }, new
            {
                ServiceType = serviceType,
            });

            object result = null;

            if (factory == null)
            {
                var innerLoc = this.InnerLocator;
                if (innerLoc != null)
                {
                    result = innerLoc.GetInstance(serviceType,
                                                  key);
                }
            }
            else
            {
                result = factory.DELEGATE
                         .Method
                         .Invoke(factory.DELEGATE
                                 .Target,
                                 new object[] { this, key });
            }

            return(result);
        }