Przeglądaj źródła

Added comparer to remove duplicate CosumerExecutors. (#654)

Co-authored-by: Patrick Heemskerk <pheemskerk@inforit.nl>
master
patheems 4 lat temu
committed by GitHub
rodzic
commit
dfc26e3f7f
Nie znaleziono w bazie danych klucza dla tego podpisu ID klucza GPG: 4AEE18F83AFDEB23
2 zmienionych plików z 42 dodań i 3 usunięć
  1. +40
    -3
      src/DotNetCore.CAP/Internal/ConsumerExecutorDescriptor.cs
  2. +2
    -0
      src/DotNetCore.CAP/Internal/IConsumerServiceSelector.Default.cs

+ 40
- 3
src/DotNetCore.CAP/Internal/ConsumerExecutorDescriptor.cs Wyświetl plik

@@ -28,8 +28,8 @@ namespace DotNetCore.CAP.Internal
/// <summary>
/// Topic name based on both <see cref="Attribute"/> and <see cref="ClassAttribute"/>.
/// </summary>
public string TopicName
{
public string TopicName
{
get
{
if (_topicName == null)
@@ -44,11 +44,48 @@ namespace DotNetCore.CAP.Internal
_topicName = Attribute.Name;
}
}
return _topicName;
return _topicName;
}
}
}

public class ConsumerExecutorDescriptorComparer : IEqualityComparer<ConsumerExecutorDescriptor>
{
public bool Equals(ConsumerExecutorDescriptor x, ConsumerExecutorDescriptor y)
{
//Check whether the compared objects reference the same data.
if (ReferenceEquals(x, y))
{
return true;
}

//Check whether any of the compared objects is null.
if (x is null || y is null)
{
return false;
}

//Check whether the ConsumerExecutorDescriptor' properties are equal.
return x.TopicName.Equals(y.TopicName, StringComparison.OrdinalIgnoreCase) &&
x.Attribute.Group.Equals(y.Attribute.Group, StringComparison.OrdinalIgnoreCase);
}

public int GetHashCode(ConsumerExecutorDescriptor obj)
{
//Check whether the object is null
if (obj is null) return 0;

//Get hash code for the Attribute Group field if it is not null.
int hashAttributeGroup = obj.Attribute?.Group == null ? 0 : obj.Attribute.Group.GetHashCode();

//Get hash code for the TopicName field.
int hashTopicName = obj.TopicName.GetHashCode();

//Calculate the hash code.
return hashAttributeGroup ^ hashTopicName;
}
}

public class ParameterDescriptor
{
public string Name { get; set; }


+ 2
- 0
src/DotNetCore.CAP/Internal/IConsumerServiceSelector.Default.cs Wyświetl plik

@@ -47,6 +47,8 @@ namespace DotNetCore.CAP.Internal

executorDescriptorList.AddRange(FindConsumersFromControllerTypes());

executorDescriptorList = executorDescriptorList.Distinct(new ConsumerExecutorDescriptorComparer()).ToList();

return executorDescriptorList;
}



Ładowanie…
Anuluj
Zapisz