From a7eba34a9a3e46c216b3294dba580cea7bb70653 Mon Sep 17 00:00:00 2001 From: dingsongjie Date: Thu, 12 Mar 2020 13:52:52 +0800 Subject: [PATCH] 注入 eventhandler --- src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs | 29 +++++++++++------------------ src/Pole.EventBus.Rabbitmq/Core/IRabbitEventBusContainer.cs | 6 +++--- src/Pole.EventBus.Rabbitmq/PoleRabbitmqStartupConfigExtensions.cs | 2 +- src/Pole.EventBus/ObserverUnitContainer.cs | 14 +------------- 4 files changed, 16 insertions(+), 35 deletions(-) diff --git a/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs b/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs index 9b388d3..8aec2bb 100644 --- a/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs +++ b/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs @@ -24,7 +24,6 @@ namespace Pole.EventBus.RabbitMQ readonly IServiceProvider serviceProvider; private readonly IObserverUnitContainer observerUnitContainer; private readonly RabbitOptions rabbitOptions; - public bool IsAutoRegisterFinished { get; private set; } public EventBusContainer( IServiceProvider serviceProvider, IObserverUnitContainer observerUnitContainer, @@ -36,7 +35,7 @@ namespace Pole.EventBus.RabbitMQ this.observerUnitContainer = observerUnitContainer; this.rabbitOptions = rabbitOptions.Value; } - public async Task AutoRegister() + public async Task AutoRegister(IServiceCollection services) { var eventList = new List<(Type type, EventInfoAttribute config)>(); var evenHandlertList = new List<(Type type, EventInfoAttribute config)>(); @@ -57,7 +56,15 @@ namespace Pole.EventBus.RabbitMQ await eventBus.AddGrainConsumer(); } } - IsAutoRegisterFinished = true; + RegisterEventHandlers(services, evenHandlertList); + } + + private void RegisterEventHandlers(IServiceCollection services, List<(Type type, EventInfoAttribute config)> evenHandlertList) + { + foreach(var eventHandler in evenHandlertList) + { + services.AddScoped(eventHandler.type); + } } public RabbitEventBus CreateEventBus(string exchange, string routePrefix, int lBCount = 1, bool autoAck = false, bool reenqueue = true, bool persistent = true) @@ -123,22 +130,9 @@ namespace Pole.EventBus.RabbitMQ foreach (var assembly in AssemblyHelper.GetAssemblies(serviceProvider.GetService>())) { - foreach (var type in assembly.GetTypes().Where(m => typeof(IPoleEventHandler).IsAssignableFrom(m) && m.IsClass && !m.IsAbstract && !typeof(Orleans.Runtime.GrainReference).IsAssignableFrom(m))) { - var eventType = type.GetGenericArguments().FirstOrDefault(); - //var eventHandlerInterface = type.GetInterfaces().FirstOrDefault(type => typeof(IPoleEventHandler).IsAssignableFrom(type) && !type.IsGenericType); - //var basePoleEventHandlerInterface = eventHandlerInterface.GetInterfaces().FirstOrDefault(m => m.IsGenericType); - - //if (basePoleEventHandlerInterface == null) - //{ - // throw new PoleEventHandlerImplementException("PoleEventHandler interface must Inherited from IPoleEventHandler"); - //} - //var eventType = basePoleEventHandlerInterface.GetGenericArguments().FirstOrDefault(); - //if (eventType == null) - //{ - // throw new PoleEventHandlerImplementException("PoleEventHandler interface must Inherited from IPoleEventHandler"); - //} + var eventType = type.BaseType.GetGenericArguments().FirstOrDefault(); var attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); if (attribute != null) @@ -150,7 +144,6 @@ namespace Pole.EventBus.RabbitMQ throw new PoleEventHandlerImplementException("Can not found EventHandlerAttribute in PoleEventHandler"); } } - } } diff --git a/src/Pole.EventBus.Rabbitmq/Core/IRabbitEventBusContainer.cs b/src/Pole.EventBus.Rabbitmq/Core/IRabbitEventBusContainer.cs index c06fd5b..71acb75 100644 --- a/src/Pole.EventBus.Rabbitmq/Core/IRabbitEventBusContainer.cs +++ b/src/Pole.EventBus.Rabbitmq/Core/IRabbitEventBusContainer.cs @@ -1,11 +1,11 @@ -using System.Threading.Tasks; +using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; namespace Pole.EventBus.RabbitMQ { public interface IRabbitEventBusContainer : IConsumerContainer { - bool IsAutoRegisterFinished { get; } - Task AutoRegister(); + Task AutoRegister(IServiceCollection service); RabbitEventBus CreateEventBus(string exchange, string routePrefix, int lBCount = 1, bool autoAck = false, bool reenqueue = false, bool persistent = false); Task Work(RabbitEventBus bus); } diff --git a/src/Pole.EventBus.Rabbitmq/PoleRabbitmqStartupConfigExtensions.cs b/src/Pole.EventBus.Rabbitmq/PoleRabbitmqStartupConfigExtensions.cs index 890c2a1..b7dbd72 100644 --- a/src/Pole.EventBus.Rabbitmq/PoleRabbitmqStartupConfigExtensions.cs +++ b/src/Pole.EventBus.Rabbitmq/PoleRabbitmqStartupConfigExtensions.cs @@ -31,7 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection if (eventBusConfig != default) await eventBusConfig(container); else - await container.AutoRegister(); + await container.AutoRegister(startupOption.Services); var consumers = container.GetConsumers(); foreach (var consumer in consumers) diff --git a/src/Pole.EventBus/ObserverUnitContainer.cs b/src/Pole.EventBus/ObserverUnitContainer.cs index 578e3ef..f892961 100644 --- a/src/Pole.EventBus/ObserverUnitContainer.cs +++ b/src/Pole.EventBus/ObserverUnitContainer.cs @@ -22,19 +22,7 @@ namespace Pole.EventBus { foreach (var type in assembly.GetTypes().Where(m => typeof(IPoleEventHandler).IsAssignableFrom(m) && m.IsClass && !m.IsAbstract && !typeof(Orleans.Runtime.GrainReference).IsAssignableFrom(m))) { - var eventType = type.GetGenericArguments().FirstOrDefault(); - //var eventHandlerInterface = type.GetInterfaces().FirstOrDefault(type => typeof(IPoleEventHandler).IsAssignableFrom(type) && !type.IsGenericType); - //var basePoleEventHandlerInterface= eventHandlerInterface.GetInterfaces().FirstOrDefault(m=>m.IsGenericType); - - //if (basePoleEventHandlerInterface == null) - //{ - // throw new PoleEventHandlerImplementException("PoleEventHandler interface must Inherited from IPoleEventHandler"); - //} - //var eventType= basePoleEventHandlerInterface.GetGenericArguments().FirstOrDefault(); - //if (eventType == null) - //{ - // throw new PoleEventHandlerImplementException("PoleEventHandler interface must Inherited from IPoleEventHandler"); - //} + var eventType = type.BaseType.GetGenericArguments().FirstOrDefault(); var attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); if (attribute != null) -- libgit2 0.25.0