~ruther/NosSmooth

d419d39fab635995ac0237520c72564a518f905e — Rutherther 2 years ago 16eed4b
fix(core): allow adding multiple responder types with IRawPacketResponder and IEveryPacketResponder
1 files changed, 8 insertions(+), 4 deletions(-)

M Core/NosSmooth.Core/Extensions/ServiceCollectionExtensions.cs
M Core/NosSmooth.Core/Extensions/ServiceCollectionExtensions.cs => Core/NosSmooth.Core/Extensions/ServiceCollectionExtensions.cs +8 -4
@@ 116,24 116,28 @@ public static class ServiceCollectionExtensions
            return serviceCollection;
        }

        bool addedResponder = false;

        if (responderType.GetInterfaces().Any(i => i == typeof(IRawPacketResponder)))
        {
            return serviceCollection.AddScoped(typeof(IRawPacketResponder), responderType);
            addedResponder = true;
            serviceCollection.AddScoped(typeof(IRawPacketResponder), responderType);
        }

        if (responderType.GetInterfaces().Any(i => i == typeof(IEveryPacketResponder)))
        {
            return serviceCollection.AddScoped(typeof(IEveryPacketResponder), responderType);
            addedResponder = true;
            serviceCollection.AddScoped(typeof(IEveryPacketResponder), responderType);
        }

        if (!responderType.GetInterfaces().Any
        if (!addedResponder && !responderType.GetInterfaces().Any
            (
                i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IPacketResponder<>)
            ))
        {
            throw new ArgumentException
            (
                $"{nameof(responderType)} should implement IPacketResponder.",
                $"{nameof(responderType)} should implement IPacketResponder<T> or IRawPacketResponder or IEveryPacketResponder.",
                nameof(responderType)
            );
        }

Do not follow this link