Procházet zdrojové kódy

Added comparer to remove duplicate CosumerExecutors. (#654)

Co-authored-by: Patrick Heemskerk <pheemskerk@inforit.nl>
master
patheems před 4 roky
committed by GitHub
rodič
revize
dfc26e3f7f
V databázi nebyl nalezen žádný známý klíč pro tento podpis ID GPG klíče: 4AEE18F83AFDEB23
2 změnil soubory, kde provedl 42 přidání a 3 odebrání
  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 Zobrazit soubor

@@ -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 Zobrazit soubor

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

executorDescriptorList.AddRange(FindConsumersFromControllerTypes());

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

return executorDescriptorList;
}



Načítá se…
Zrušit
Uložit