internal static void TryAddService(Type serviceType)
        {
            //找到在 serviceType 上标记的所有 ContractImplAttribute,并构造对应的 ContractImpl 对象,加入到列表中。
            var attriList = serviceType.GetCustomAttributes(typeof(ContractImplAttribute), false);

            foreach (ContractImplAttribute attri in attriList)
            {
                var impl = new ContractImpl
                {
                    ServiceType  = serviceType,
                    ContractType = attri.ContractType ?? serviceType,
                    Version      = new Version(attri.Version),
                };
                if (!impl.ContractType.HasMarked <ContractAttribute>())
                {
                    throw new InvalidProgramException(string.Format(
                                                          "{0} 类型实现了契约类型 {1} ,需要为这个契约添加 ContractAttribute 标记。", serviceType, impl.ContractType
                                                          ));
                }
                //找到对应的列表,如果不存在,则添加一个新的列表。
                ContractImplList list = null;
                if (!_allServices.TryGetValue(impl.ContractType, out list))
                {
                    list = new ContractImplList(impl.ContractType);
                    _allServices.Add(impl.ContractType, list);
                }

                list.Add(impl);
            }
        }
        internal static ContractImpl FindImpl(Type contractType)
        {
            ContractImplList list = null;

            if (_allServices.TryGetValue(contractType, out list))
            {
                return(list.Default());
            }
            return(null);
        }
        internal static ContractImpl FindImpl(Type contractType, Version version)
        {
            ContractImplList list = null;

            if (_allServices.TryGetValue(contractType, out list))
            {
                var res = list.Find(version);
                if (res != null)
                {
                    return(res);
                }
            }
            return(null);
        }
Esempio n. 4
0
        internal static ContractImpl FindImpl(Type contractType)
        {
            //try
            //{
            //    _lock.EnterReadLock();

            ContractImplList list = null;

            if (_allServices.TryGetValue(contractType, out list))
            {
                return(list.Default());
            }
            //}
            //finally
            //{
            //    _lock.ExitReadLock();
            //}

            return(null);
        }
Esempio n. 5
0
        internal static ContractImpl FindImpl(Type contractType, Version version)
        {
            //try
            //{
            //    _lock.EnterReadLock();

            ContractImplList list = null;

            if (_allServices.TryGetValue(contractType, out list))
            {
                var res = list.Find(version);
                if (res != null)
                {
                    return(res);
                }
            }
            //}
            //finally
            //{
            //    _lock.ExitReadLock();
            //}

            return(null);
        }