From 888759484ba5bb7d020f5ea3486030506fd2afa0 Mon Sep 17 00:00:00 2001 From: dingsongjie Date: Mon, 24 Feb 2020 15:06:51 +0800 Subject: [PATCH] 修复 bug --- samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/Backet.cs | 48 ------------------------------------------------ samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/BacketItem.cs | 16 ---------------- samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/Backet.cs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/BacketItem.cs | 16 ++++++++++++++++ samples/apis/Backet.Api/Domain/Event/BacketCreatedEvent.cs | 13 ------------- samples/apis/Backet.Api/Domain/Events/BacketCreatedEvent.cs | 15 +++++++++++++++ src/Pole.Core/EventBus/Event/EventAttribute.cs | 12 ------------ src/Pole.Core/EventBus/Event/EventInfoAttribute.cs | 12 ++++++++++++ src/Pole.Core/EventBus/ObserverUnitContainer.cs | 18 +++++++++++++++--- src/Pole.Core/Serialization/EventTypeFinder.cs | 4 ++-- src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs | 30 +++++++++++++++++++++--------- 11 files changed, 129 insertions(+), 103 deletions(-) delete mode 100644 samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/Backet.cs delete mode 100644 samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/BacketItem.cs create mode 100644 samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/Backet.cs create mode 100644 samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/BacketItem.cs delete mode 100644 samples/apis/Backet.Api/Domain/Event/BacketCreatedEvent.cs create mode 100644 samples/apis/Backet.Api/Domain/Events/BacketCreatedEvent.cs delete mode 100644 src/Pole.Core/EventBus/Event/EventAttribute.cs create mode 100644 src/Pole.Core/EventBus/Event/EventInfoAttribute.cs diff --git a/samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/Backet.cs b/samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/Backet.cs deleted file mode 100644 index 02fce3e..0000000 --- a/samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/Backet.cs +++ /dev/null @@ -1,48 +0,0 @@ -using Pole.Core.Domain; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Backet.Api.Domain.AggregatesModel.BacketAggregate -{ - public class Backet : Entity, IAggregateRoot - { - public void AddBacketItem(string productId, string productName, long Price) - { - BacketItem backetItem = new BacketItem() - { - Id = Guid.NewGuid().ToString("N"), - Price = Price, - ProductId = productId, - ProductName = productName - }; - BacketItems.Add(backetItem); - SetBacketTotalPrice(); - } - public void ModifyItemProductId(string productId) - { - BacketItems.ForEach(m => m.ProductId = productId); - } - private void SetBacketTotalPrice() - { - foreach (var item in BacketItems) - { - TotalPrice = BacketItems.Sum(m=>m.Price); - } - } - public string UserId { get; set; } - public List BacketItems { get; private set; } = new List(); - public long TotalPrice { get; private set; } - - internal void RemoveFirstItem() - { - var first = BacketItems.FirstOrDefault(); - if (first != null) - { - BacketItems.Remove(first); - SetBacketTotalPrice(); - } - } - } -} diff --git a/samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/BacketItem.cs b/samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/BacketItem.cs deleted file mode 100644 index d86a6fb..0000000 --- a/samples/apis/Backet.Api/Domain/AggregatesModel/BacketAggregate/BacketItem.cs +++ /dev/null @@ -1,16 +0,0 @@ -using Pole.Core.Domain; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Backet.Api.Domain.AggregatesModel.BacketAggregate -{ - public class BacketItem : Entity - { - public string ProductId { get; set; } - public string ProductName { get; set; } - public long Price { get; set; } - public string BacketId { get; set; } - } -} diff --git a/samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/Backet.cs b/samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/Backet.cs new file mode 100644 index 0000000..02fce3e --- /dev/null +++ b/samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/Backet.cs @@ -0,0 +1,48 @@ +using Pole.Core.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Backet.Api.Domain.AggregatesModel.BacketAggregate +{ + public class Backet : Entity, IAggregateRoot + { + public void AddBacketItem(string productId, string productName, long Price) + { + BacketItem backetItem = new BacketItem() + { + Id = Guid.NewGuid().ToString("N"), + Price = Price, + ProductId = productId, + ProductName = productName + }; + BacketItems.Add(backetItem); + SetBacketTotalPrice(); + } + public void ModifyItemProductId(string productId) + { + BacketItems.ForEach(m => m.ProductId = productId); + } + private void SetBacketTotalPrice() + { + foreach (var item in BacketItems) + { + TotalPrice = BacketItems.Sum(m=>m.Price); + } + } + public string UserId { get; set; } + public List BacketItems { get; private set; } = new List(); + public long TotalPrice { get; private set; } + + internal void RemoveFirstItem() + { + var first = BacketItems.FirstOrDefault(); + if (first != null) + { + BacketItems.Remove(first); + SetBacketTotalPrice(); + } + } + } +} diff --git a/samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/BacketItem.cs b/samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/BacketItem.cs new file mode 100644 index 0000000..d86a6fb --- /dev/null +++ b/samples/apis/Backet.Api/Domain/AggregatesModels/BacketAggregate/BacketItem.cs @@ -0,0 +1,16 @@ +using Pole.Core.Domain; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; + +namespace Backet.Api.Domain.AggregatesModel.BacketAggregate +{ + public class BacketItem : Entity + { + public string ProductId { get; set; } + public string ProductName { get; set; } + public long Price { get; set; } + public string BacketId { get; set; } + } +} diff --git a/samples/apis/Backet.Api/Domain/Event/BacketCreatedEvent.cs b/samples/apis/Backet.Api/Domain/Event/BacketCreatedEvent.cs deleted file mode 100644 index 6ec6345..0000000 --- a/samples/apis/Backet.Api/Domain/Event/BacketCreatedEvent.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Pole.Core.EventBus.Event; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace Backet.Api.Domain.Event -{ - public class BacketCreatedEvent:IEvent - { - public string BacketId { get; set; } - } -} diff --git a/samples/apis/Backet.Api/Domain/Events/BacketCreatedEvent.cs b/samples/apis/Backet.Api/Domain/Events/BacketCreatedEvent.cs new file mode 100644 index 0000000..c667e3b --- /dev/null +++ b/samples/apis/Backet.Api/Domain/Events/BacketCreatedEvent.cs @@ -0,0 +1,15 @@ +using Pole.Core.EventBus.Event; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using System.Threading.Tasks; + +namespace Backet.Api.Domain.Event +{ + [EventInfo(EventName = "Backet")] + public class BacketCreatedEvent : IEvent + { + public string BacketId { get; set; } + } +} diff --git a/src/Pole.Core/EventBus/Event/EventAttribute.cs b/src/Pole.Core/EventBus/Event/EventAttribute.cs deleted file mode 100644 index 62e5063..0000000 --- a/src/Pole.Core/EventBus/Event/EventAttribute.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; - -namespace Pole.Core.EventBus.Event -{ - [AttributeUsage(AttributeTargets.Class)] - public class EventAttribute: Attribute - { - public string EventName { get; set; } - } -} diff --git a/src/Pole.Core/EventBus/Event/EventInfoAttribute.cs b/src/Pole.Core/EventBus/Event/EventInfoAttribute.cs new file mode 100644 index 0000000..b5e08a3 --- /dev/null +++ b/src/Pole.Core/EventBus/Event/EventInfoAttribute.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Pole.Core.EventBus.Event +{ + [AttributeUsage(AttributeTargets.Class)] + public class EventInfoAttribute: Attribute + { + public string EventName { get; set; } + } +} diff --git a/src/Pole.Core/EventBus/ObserverUnitContainer.cs b/src/Pole.Core/EventBus/ObserverUnitContainer.cs index b78771f..2af2997 100644 --- a/src/Pole.Core/EventBus/ObserverUnitContainer.cs +++ b/src/Pole.Core/EventBus/ObserverUnitContainer.cs @@ -8,6 +8,7 @@ using Microsoft.Extensions.DependencyInjection; using Pole.Core.EventBus.EventHandler; using System.Linq; using Pole.Core.Exceptions; +using Pole.Core.EventBus.Event; namespace Pole.Core.EventBus { @@ -16,17 +17,28 @@ namespace Pole.Core.EventBus readonly ConcurrentDictionary> unitDict = new ConcurrentDictionary>(); public ObserverUnitContainer(IServiceProvider serviceProvider) { - var eventHandlerList = new List<(Type, EventHandlerAttribute)>(); + var eventHandlerList = new List<(Type, EventInfoAttribute)>(); 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 attribute = type.GetCustomAttributes(typeof(EventHandlerAttribute), false).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 attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); if (attribute != null) { - eventHandlerList.Add((eventHandlerInterface, (EventHandlerAttribute)attribute)); + eventHandlerList.Add((eventHandlerInterface, (EventInfoAttribute)attribute)); } else { diff --git a/src/Pole.Core/Serialization/EventTypeFinder.cs b/src/Pole.Core/Serialization/EventTypeFinder.cs index a5d71f0..079ee66 100644 --- a/src/Pole.Core/Serialization/EventTypeFinder.cs +++ b/src/Pole.Core/Serialization/EventTypeFinder.cs @@ -25,8 +25,8 @@ namespace Pole.Core.Serialization foreach (var type in assembly.GetTypes().Where(m => baseEventType.IsAssignableFrom(m)&&!m.IsAbstract)) { var eventCode = type.FullName; - var eventAttribute = type.GetCustomAttributes(typeof(EventAttribute),false).FirstOrDefault(); - if (eventAttribute is EventAttribute attribute ) + var eventAttribute = type.GetCustomAttributes(typeof(EventInfoAttribute),false).FirstOrDefault(); + if (eventAttribute is EventInfoAttribute attribute ) { eventCode = attribute.EventName; } diff --git a/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs b/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs index 5c4f72c..63ce567 100644 --- a/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs +++ b/src/Pole.EventBus.Rabbitmq/Core/EventBusContainer.cs @@ -38,8 +38,8 @@ namespace Pole.EventBus.RabbitMQ } public async Task AutoRegister() { - var eventList = new List<(Type type, EventAttribute config)>(); - var evenHandlertList = new List<(Type type, EventHandlerAttribute config)>(); + var eventList = new List<(Type type, EventInfoAttribute config)>(); + var evenHandlertList = new List<(Type type, EventInfoAttribute config)>(); AddEventAndEventHandlerInfoList(eventList, evenHandlertList); foreach (var (type, config) in eventList) { @@ -110,21 +110,21 @@ namespace Pole.EventBus.RabbitMQ #region helpers - private void AddEventAndEventHandlerInfoList(List<(Type type, EventAttribute config)> eventList, List<(Type type, EventHandlerAttribute config)> eventHandlertList) + private void AddEventAndEventHandlerInfoList(List<(Type type, EventInfoAttribute config)> eventList, List<(Type type, EventInfoAttribute config)> eventHandlertList) { foreach (var assembly in AssemblyHelper.GetAssemblies(serviceProvider.GetService>())) { foreach (var type in assembly.GetTypes().Where(m => typeof(IEvent).IsAssignableFrom(m) && m.IsClass)) { - var attribute = type.GetCustomAttributes(typeof(EventAttribute), false).FirstOrDefault(); + var attribute = type.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); if (attribute != null) { - eventList.Add((type, (EventAttribute)attribute)); + eventList.Add((type, (EventInfoAttribute)attribute)); } else { - eventList.Add((type, new EventAttribute() { EventName = type.FullName })); + eventList.Add((type, new EventInfoAttribute() { EventName = type.FullName })); } } } @@ -132,13 +132,25 @@ 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))) + foreach (var type in assembly.GetTypes().Where(m => typeof(IPoleEventHandler).IsAssignableFrom(m) && m.IsClass && !m.IsAbstract && !typeof(Orleans.Runtime.GrainReference).IsAssignableFrom(m))) { - var attribute = type.GetCustomAttributes(typeof(EventHandlerAttribute), false).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 attribute = eventType.GetCustomAttributes(typeof(EventInfoAttribute), false).FirstOrDefault(); if (attribute != null) { - eventHandlertList.Add((type, (EventHandlerAttribute)attribute)); + eventHandlertList.Add((eventHandlerInterface, (EventInfoAttribute)attribute)); } else { -- libgit2 0.25.0