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); }
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); }
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); }