Commit a7eba34a by dingsongjie

注入 eventhandler

parent 888a195d
...@@ -24,7 +24,6 @@ namespace Pole.EventBus.RabbitMQ ...@@ -24,7 +24,6 @@ namespace Pole.EventBus.RabbitMQ
readonly IServiceProvider serviceProvider; readonly IServiceProvider serviceProvider;
private readonly IObserverUnitContainer observerUnitContainer; private readonly IObserverUnitContainer observerUnitContainer;
private readonly RabbitOptions rabbitOptions; private readonly RabbitOptions rabbitOptions;
public bool IsAutoRegisterFinished { get; private set; }
public EventBusContainer( public EventBusContainer(
IServiceProvider serviceProvider, IServiceProvider serviceProvider,
IObserverUnitContainer observerUnitContainer, IObserverUnitContainer observerUnitContainer,
...@@ -36,7 +35,7 @@ namespace Pole.EventBus.RabbitMQ ...@@ -36,7 +35,7 @@ namespace Pole.EventBus.RabbitMQ
this.observerUnitContainer = observerUnitContainer; this.observerUnitContainer = observerUnitContainer;
this.rabbitOptions = rabbitOptions.Value; this.rabbitOptions = rabbitOptions.Value;
} }
public async Task AutoRegister() public async Task AutoRegister(IServiceCollection services)
{ {
var eventList = new List<(Type type, EventInfoAttribute config)>(); var eventList = new List<(Type type, EventInfoAttribute config)>();
var evenHandlertList = new List<(Type type, EventInfoAttribute config)>(); var evenHandlertList = new List<(Type type, EventInfoAttribute config)>();
...@@ -57,7 +56,15 @@ namespace Pole.EventBus.RabbitMQ ...@@ -57,7 +56,15 @@ namespace Pole.EventBus.RabbitMQ
await eventBus.AddGrainConsumer<string>(); await eventBus.AddGrainConsumer<string>();
} }
} }
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) 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 ...@@ -123,22 +130,9 @@ namespace Pole.EventBus.RabbitMQ
foreach (var assembly in AssemblyHelper.GetAssemblies(serviceProvider.GetService<ILogger<EventBusContainer>>())) foreach (var assembly in AssemblyHelper.GetAssemblies(serviceProvider.GetService<ILogger<EventBusContainer>>()))
{ {
foreach (var type in assembly.GetTypes().Where(m => typeof(IPoleEventHandler).IsAssignableFrom(m) && m.IsClass && !m.IsAbstract && !typeof(Orleans.Runtime.GrainReference).IsAssignableFrom(m))) 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 eventType = type.BaseType.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<TEvent>");
//}
//var eventType = basePoleEventHandlerInterface.GetGenericArguments().FirstOrDefault();
//if (eventType == null)
//{
// throw new PoleEventHandlerImplementException("PoleEventHandler interface must Inherited from IPoleEventHandler<TEvent>");
//}
var attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); var attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault();
if (attribute != null) if (attribute != null)
...@@ -150,7 +144,6 @@ namespace Pole.EventBus.RabbitMQ ...@@ -150,7 +144,6 @@ namespace Pole.EventBus.RabbitMQ
throw new PoleEventHandlerImplementException("Can not found EventHandlerAttribute in PoleEventHandler"); throw new PoleEventHandlerImplementException("Can not found EventHandlerAttribute in PoleEventHandler");
} }
} }
} }
} }
......
using System.Threading.Tasks; using Microsoft.Extensions.DependencyInjection;
using System.Threading.Tasks;
namespace Pole.EventBus.RabbitMQ namespace Pole.EventBus.RabbitMQ
{ {
public interface IRabbitEventBusContainer : IConsumerContainer public interface IRabbitEventBusContainer : IConsumerContainer
{ {
bool IsAutoRegisterFinished { get; } Task AutoRegister(IServiceCollection service);
Task AutoRegister();
RabbitEventBus CreateEventBus(string exchange, string routePrefix, int lBCount = 1, bool autoAck = false, bool reenqueue = false, bool persistent = false); RabbitEventBus CreateEventBus(string exchange, string routePrefix, int lBCount = 1, bool autoAck = false, bool reenqueue = false, bool persistent = false);
Task Work(RabbitEventBus bus); Task Work(RabbitEventBus bus);
} }
......
...@@ -31,7 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection ...@@ -31,7 +31,7 @@ namespace Microsoft.Extensions.DependencyInjection
if (eventBusConfig != default) if (eventBusConfig != default)
await eventBusConfig(container); await eventBusConfig(container);
else else
await container.AutoRegister(); await container.AutoRegister(startupOption.Services);
var consumers = container.GetConsumers(); var consumers = container.GetConsumers();
foreach (var consumer in consumers) foreach (var consumer in consumers)
......
...@@ -22,19 +22,7 @@ namespace Pole.EventBus ...@@ -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))) 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 eventType = type.BaseType.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<TEvent>");
//}
//var eventType= basePoleEventHandlerInterface.GetGenericArguments().FirstOrDefault();
//if (eventType == null)
//{
// throw new PoleEventHandlerImplementException("PoleEventHandler interface must Inherited from IPoleEventHandler<TEvent>");
//}
var attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); var attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault();
if (attribute != null) if (attribute != null)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment