/// <summary> /// Récupére la liste des services utilisés par cette couche. Cette méthode assure que les services sont uniques. /// </summary> /// <param name="mode">Mode à prendre en compte</param> /// <returns></returns> public List <ClassUsesOperations> GetServicesUsed(ConfigurationMode mode) { List <ClassUsesOperations> services = new List <ClassUsesOperations>(); List <TypeWithOperations> types = GetImplementations(); if (types == null || types.Count == 0) { return(services); } List <Guid> doublons = new List <Guid>(); foreach (TypeWithOperations clazz in types) { foreach (ClassUsesOperations service in ClassUsesOperations.GetLinksToServicesUsed(clazz)) { if (!mode.CheckConfigurationMode(service.ConfigurationMode) || doublons.Contains(service.TargetService.Id)) { continue; } doublons.Add(service.TargetService.Id); services.Add(service); } } return(services); }
/// <summary> /// Gets the service references. /// </summary> /// <param name="item">The item.</param> /// <param name="context">The context.</param> /// <param name="layers">The layers.</param> /// <returns></returns> protected IEnumerable <ReferenceItem> GetServiceReferences(TypeWithOperations item, ReferenceContext context, List <Guid> layers) { foreach (NamedElement service in item.ServicesUsed) { IList <ClassUsesOperations> externalServiceLinks = ClassUsesOperations.GetLinksToServicesUsed(item); foreach (ClassUsesOperations link in externalServiceLinks) { if (context.Mode.CheckConfigurationMode(link.ConfigurationMode) && context.CheckScope(link.Scope)) { if (service is ExternalServiceContract) { ExternalServiceContract contract = service as ExternalServiceContract; // Ici on part du principe qu'un composant ne publie qu'une couche donc // on ne prend en considèration que le 1er port rencontré. Si ce n'était pas le // cas, il faudrait d'abord créer un tableau global des ports rencontrés PUIS faire // un RetrieveReferencesForExternalComponent avec tous les ports. List <Guid> ports2 = new List <Guid>(); ports2.Add(contract.ComponentPortMoniker); yield return (new ReferenceItem(this, contract.Parent, link.Scope, ports2, context.IsExternal)); } else if (service is ServiceContract) { ServiceContract contract = service as ServiceContract; if (!layers.Contains(contract.Layer.Id)) { layers.Add(contract.Layer.Id); yield return(new ReferenceItem(this, contract.Layer, context.IsExternal)); } } else if (service is ClassImplementation) { ClassImplementation targetClazz = service as ClassImplementation; if (!layers.Contains(targetClazz.Layer.Id)) { layers.Add(targetClazz.Layer.Id); yield return(new ReferenceItem(this, targetClazz.Layer, context.IsExternal)); } } } } } }