Преглед на файлове

Added comparer to remove duplicate CosumerExecutors. (#654)

Co-authored-by: Patrick Heemskerk <pheemskerk@inforit.nl>
master
patheems преди 4 години
committed by GitHub
родител
ревизия
dfc26e3f7f
No known key found for this signature in database GPG ключ ID: 4AEE18F83AFDEB23
променени са 2 файла, в които са добавени 42 реда и са изтрити 3 реда
  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 Целия файл

@@ -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 Целия файл

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

executorDescriptorList.AddRange(FindConsumersFromControllerTypes());

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

return executorDescriptorList;
}



Зареждане…
Отказ
Запис