diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs deleted file mode 100644 index 8f9be2318f..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangeEventHelper.cs +++ /dev/null @@ -1,227 +0,0 @@ -using System; -using System.Collections.Generic; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Options; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Domain.Entities.Events.Distributed; -using Volo.Abp.DynamicProxy; -using Volo.Abp.EventBus; -using Volo.Abp.EventBus.Distributed; -using Volo.Abp.EventBus.Local; -using Volo.Abp.Uow; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// Used to trigger entity change events. -/// -public class EntityChangeEventHelper : IEntityChangeEventHelper, ITransientDependency -{ - private const string UnitOfWorkEventRecordEntityPropName = "_Abp_Entity"; - - public ILogger Logger { get; set; } - public ILocalEventBus LocalEventBus { get; set; } - public IDistributedEventBus DistributedEventBus { get; set; } - - protected IUnitOfWorkManager UnitOfWorkManager { get; } - protected IEntityToEtoMapper EntityToEtoMapper { get; } - protected AbpDistributedEntityEventOptions DistributedEntityEventOptions { get; } - - public EntityChangeEventHelper( - IUnitOfWorkManager unitOfWorkManager, - IEntityToEtoMapper entityToEtoMapper, - IOptions distributedEntityEventOptions) - { - UnitOfWorkManager = unitOfWorkManager; - EntityToEtoMapper = entityToEtoMapper; - DistributedEntityEventOptions = distributedEntityEventOptions.Value; - - LocalEventBus = NullLocalEventBus.Instance; - DistributedEventBus = NullDistributedEventBus.Instance; - Logger = NullLogger.Instance; - } - - public virtual void PublishEntityCreatingEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, -#pragma warning disable 618 - typeof(EntityCreatingEventData<>), -#pragma warning restore 618 - entity, - entity - ); - } - - public virtual void PublishEntityCreatedEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, - typeof(EntityCreatedEventData<>), - entity, - entity - ); - - if (ShouldPublishDistributedEventForEntity(entity)) - { - var eto = EntityToEtoMapper.Map(entity); - if (eto != null) - { - TriggerEventWithEntity( - DistributedEventBus, - typeof(EntityCreatedEto<>), - eto, - entity - ); - } - } - } - - private bool ShouldPublishDistributedEventForEntity(object entity) - { - return DistributedEntityEventOptions - .AutoEventSelectors - .IsMatch( - ProxyHelper - .UnProxy(entity) - .GetType() - ); - } - - public virtual void PublishEntityUpdatingEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, -#pragma warning disable 618 - typeof(EntityUpdatingEventData<>), -#pragma warning restore 618 - entity, - entity - ); - } - - public virtual void PublishEntityUpdatedEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, - typeof(EntityUpdatedEventData<>), - entity, - entity - ); - - if (ShouldPublishDistributedEventForEntity(entity)) - { - var eto = EntityToEtoMapper.Map(entity); - if (eto != null) - { - TriggerEventWithEntity( - DistributedEventBus, - typeof(EntityUpdatedEto<>), - eto, - entity - ); - } - } - } - - public virtual void PublishEntityDeletingEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, -#pragma warning disable 618 - typeof(EntityDeletingEventData<>), -#pragma warning restore 618 - entity, - entity - ); - } - - public virtual void PublishEntityDeletedEvent(object entity) - { - TriggerEventWithEntity( - LocalEventBus, - typeof(EntityDeletedEventData<>), - entity, - entity - ); - - if (ShouldPublishDistributedEventForEntity(entity)) - { - var eto = EntityToEtoMapper.Map(entity); - if (eto != null) - { - TriggerEventWithEntity( - DistributedEventBus, - typeof(EntityDeletedEto<>), - eto, - entity - ); - } - } - } - - protected virtual void TriggerEventWithEntity( - IEventBus eventPublisher, - Type genericEventType, - object entityOrEto, - object originalEntity) - { - var entityType = ProxyHelper.UnProxy(entityOrEto).GetType(); - var eventType = genericEventType.MakeGenericType(entityType); - var eventData = Activator.CreateInstance(eventType, entityOrEto); - var currentUow = UnitOfWorkManager.Current; - - if (currentUow == null) - { - Logger.LogWarning("UnitOfWorkManager.Current is null! Can not publish the event."); - return; - } - - var eventRecord = new UnitOfWorkEventRecord(eventType, eventData, EventOrderGenerator.GetNext()) - { - Properties = - { - { UnitOfWorkEventRecordEntityPropName, originalEntity }, - } - }; - - /* We are trying to eliminate same events for the same entity. - * In this way, for example, we don't trigger update event for an entity multiple times - * even if it is updated multiple times in the current UOW. - */ - - if (eventPublisher == DistributedEventBus) - { - currentUow.AddOrReplaceDistributedEvent( - eventRecord, - otherRecord => IsSameEntityEventRecord(eventRecord, otherRecord) - ); - } - else - { - currentUow.AddOrReplaceLocalEvent( - eventRecord, - otherRecord => IsSameEntityEventRecord(eventRecord, otherRecord) - ); - } - } - - public bool IsSameEntityEventRecord(UnitOfWorkEventRecord record1, UnitOfWorkEventRecord record2) - { - if (record1.EventType != record2.EventType) - { - return false; - } - - var record1OriginalEntity = record1.Properties.GetOrDefault(UnitOfWorkEventRecordEntityPropName) as IEntity; - var record2OriginalEntity = record2.Properties.GetOrDefault(UnitOfWorkEventRecordEntityPropName) as IEntity; - - if (record1OriginalEntity == null || record2OriginalEntity == null) - { - return false; - } - - return EntityHelper.EntityEquals(record1OriginalEntity, record2OriginalEntity); - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs deleted file mode 100644 index ae24163966..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityChangingEventData.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// Used to pass data for an event when an entity () is being changed (creating, updating or deleting). -/// See , and classes. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityChangedEventData. Please use EntityChangedEventData instead.")] -public class EntityChangingEventData : EntityEventData -{ - /// - /// Constructor. - /// - /// Changing entity in this event - public EntityChangingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs deleted file mode 100644 index 914c8ca7c7..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityCreatingEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// This type of event is used to notify just before creation of an Entity. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityCreatedEventData. Please use EntityCreatedEventData instead.")] -public class EntityCreatingEventData : EntityChangingEventData -{ - /// - /// Constructor. - /// - /// The entity which is being created - public EntityCreatingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs deleted file mode 100644 index af0d1218f7..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityDeletingEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// This type of event is used to notify just before deletion of an Entity. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityDeletedEventData. Please use EntityDeletedEventData instead.")] -public class EntityDeletingEventData : EntityChangingEventData -{ - /// - /// Constructor. - /// - /// The entity which is being deleted - public EntityDeletingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs b/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs deleted file mode 100644 index 703304fefb..0000000000 --- a/framework/src/Volo.Abp.Ddd.Domain/Volo/Abp/Domain/Entities/Events/EntityUpdatingEventData.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; - -namespace Volo.Abp.Domain.Entities.Events; - -/// -/// This type of event is used to notify just before update of an Entity. -/// -/// Entity type -[Serializable] -[Obsolete("This event is no longer needed and identical to EntityUpdatedEventData. Please use EntityUpdatedEventData instead.")] -public class EntityUpdatingEventData : EntityChangingEventData -{ - /// - /// Constructor. - /// - /// The entity which is being updated - public EntityUpdatingEventData(TEntity entity) - : base(entity) - { - - } -} diff --git a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs index a94c722faf..c6ffa48d37 100644 --- a/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs +++ b/framework/test/Volo.Abp.TestApp/Volo/Abp/TestApp/Testing/EntityChangeEvents_Tests.cs @@ -38,23 +38,6 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase using (var uow = GetRequiredService().Begin()) { -#pragma warning disable 618 - LocalEventBus.Subscribe>(data => -#pragma warning restore 618 - { - creatingEventTriggered.ShouldBeFalse(); - createdEventTriggered.ShouldBeFalse(); - - creatingEventTriggered = true; - - data.Entity.Name.ShouldBe(personName); - - /* Want to change age from 15 to 18 */ - data.Entity.Age.ShouldBe(15); - data.Entity.Age = 18; - return Task.CompletedTask; - }); - LocalEventBus.Subscribe>(data => { creatingEventTriggered.ShouldBeTrue(); @@ -62,7 +45,7 @@ public abstract class EntityChangeEvents_Tests : TestAppTestBase createdEventTriggered = true; - data.Entity.Age.ShouldBe(18); + data.Entity.Age.ShouldBe(15); data.Entity.Name.ShouldBe(personName); return Task.CompletedTask;