From d5f5bbf65f36fd22d26115c750d60080c8e5e11c Mon Sep 17 00:00:00 2001 From: Nikoo Asadnejad Date: Thu, 7 Nov 2024 12:38:35 +0330 Subject: [PATCH 1/6] chore: expand outBoxMessage --- .../GenericRepository.Tests.AssemblyInfo.cs | 2 +- ...cRepository.Tests.AssemblyInfoInputs.cache | 2 +- .../Domain/Entities/OutBoxMessage.cs | 23 ++++++++++++++----- .../Infrastructure/Context/CommandContext.cs | 1 + .../net8.0/GenericRepository.AssemblyInfo.cs | 2 +- ...GenericRepository.AssemblyInfoInputs.cache | 2 +- 6 files changed, 22 insertions(+), 10 deletions(-) diff --git a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs index 3a231c0..da88244 100644 --- a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs +++ b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs @@ -13,7 +13,7 @@ [assembly: System.Reflection.AssemblyCompanyAttribute("GenericRepository.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3cc96f382c7be1a9675e69ec8c699670228b76ff")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+606efc5e2ab09a234f46c22dab96e198890c2f32")] [assembly: System.Reflection.AssemblyProductAttribute("GenericRepository.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("GenericRepository.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache index 044e338..76839cb 100644 --- a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache +++ b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -f9bb6546aa0d4fec9f073b74e7b4b1344eefe7c4d8f5155c0ca2a52c0087693e +34ef494666a0784708e4b8525a2a773a4423ef0093700cd5120c2454033d40da diff --git a/GenericRepository/Domain/Entities/OutBoxMessage.cs b/GenericRepository/Domain/Entities/OutBoxMessage.cs index ae68d43..988faeb 100644 --- a/GenericRepository/Domain/Entities/OutBoxMessage.cs +++ b/GenericRepository/Domain/Entities/OutBoxMessage.cs @@ -4,17 +4,28 @@ namespace GenericRepository.Domain.Entities; public class OutBoxMessage : BaseEntity { - public OutBoxMessage(string type , string content) + private OutBoxMessage(string type , string content) { Type = type; Content = content; + OccurredOnUtc = DateTime.UtcNow; } - public OutBoxMessage(IDomainEvent domainEvent) + + public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) { - Type = domainEvent.GetType().Name; - Content = JsonSerializer.Serialize(domainEvent); + return new OutBoxMessage(domainEvent.GetType().Name, JsonSerializer.Serialize(domainEvent)); } - public string Type { get; private set; } - public string Content { get; private set; } + public int Id { get; init; } + public string Type { get; init; } + public string Content { get; init; } + public DateTime OccurredOnUtc { get; init; } + public DateTime? ProcessedOnUtc { get; private set; } + public string? Error { get; private set; } + + public void Process(string? error = null) + { + ProcessedOnUtc = DateTime.UtcNow; + Error = error; + } } \ No newline at end of file diff --git a/GenericRepository/Infrastructure/Context/CommandContext.cs b/GenericRepository/Infrastructure/Context/CommandContext.cs index 3a0f09b..612808e 100644 --- a/GenericRepository/Infrastructure/Context/CommandContext.cs +++ b/GenericRepository/Infrastructure/Context/CommandContext.cs @@ -17,6 +17,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly()); } + private static void TrackChanges(object sender, EntityEntryEventArgs e) { if (e.Entry.Entity is BaseEntity model) diff --git a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs index 404ea91..4e651ca 100644 --- a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs +++ b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs @@ -13,7 +13,7 @@ [assembly: System.Reflection.AssemblyCompanyAttribute("GenericRepository")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+3cc96f382c7be1a9675e69ec8c699670228b76ff")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+606efc5e2ab09a234f46c22dab96e198890c2f32")] [assembly: System.Reflection.AssemblyProductAttribute("GenericRepository")] [assembly: System.Reflection.AssemblyTitleAttribute("GenericRepository")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache index eef50c8..f90eee0 100644 --- a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache +++ b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache @@ -1 +1 @@ -6462fc54133ef9337fce403c652f60c238bf49d2c48db373e41601901073a7b5 +517f60ee648c7247e2ae9451eb824580db26b8246d3fe63da63c98ae829a6dd2 From 7a9bdad815325c5fd109ee7c882c911d2f02d59b Mon Sep 17 00:00:00 2001 From: Nikoo Asadnejad Date: Thu, 7 Nov 2024 12:48:39 +0330 Subject: [PATCH 2/6] chore(outBoxMessage): add event type --- GenericRepository/Domain/Entities/OutBoxMessage.cs | 11 +++++++---- GenericRepository/Domain/Enums/EventTypeEnum.cs | 7 +++++++ GenericRepository/Domain/IDomainEvent.cs | 3 ++- GenericRepository/Domain/ValueObject.cs | 6 ++++++ .../Domain/ValueObjects/OutBoxMessageEventType.cs | 7 +++++++ .../OutBoxMessageConfiguration.cs | 14 +++++++++++++- 6 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 GenericRepository/Domain/Enums/EventTypeEnum.cs create mode 100644 GenericRepository/Domain/ValueObject.cs create mode 100644 GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs diff --git a/GenericRepository/Domain/Entities/OutBoxMessage.cs b/GenericRepository/Domain/Entities/OutBoxMessage.cs index 988faeb..35986b2 100644 --- a/GenericRepository/Domain/Entities/OutBoxMessage.cs +++ b/GenericRepository/Domain/Entities/OutBoxMessage.cs @@ -1,14 +1,17 @@ using System.Text.Json; +using GenericRepository.Domain.Enums; namespace GenericRepository.Domain.Entities; public class OutBoxMessage : BaseEntity { - private OutBoxMessage(string type , string content) + private OutBoxMessage(string type, string content, + EventTypeEnum eventType = EventTypeEnum.Internal) { - Type = type; + EntityType = type; Content = content; OccurredOnUtc = DateTime.UtcNow; + EventType = eventType; } public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) @@ -17,12 +20,12 @@ public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) } public int Id { get; init; } - public string Type { get; init; } + public string EntityType { get; init; } public string Content { get; init; } public DateTime OccurredOnUtc { get; init; } public DateTime? ProcessedOnUtc { get; private set; } public string? Error { get; private set; } - + public EventTypeEnum EventType { get; init; } public void Process(string? error = null) { ProcessedOnUtc = DateTime.UtcNow; diff --git a/GenericRepository/Domain/Enums/EventTypeEnum.cs b/GenericRepository/Domain/Enums/EventTypeEnum.cs new file mode 100644 index 0000000..77cf0f8 --- /dev/null +++ b/GenericRepository/Domain/Enums/EventTypeEnum.cs @@ -0,0 +1,7 @@ +namespace GenericRepository.Domain.Enums; + +public enum EventTypeEnum : byte +{ + Internal, + Integration +} \ No newline at end of file diff --git a/GenericRepository/Domain/IDomainEvent.cs b/GenericRepository/Domain/IDomainEvent.cs index 8eeaba2..4ddbfe8 100644 --- a/GenericRepository/Domain/IDomainEvent.cs +++ b/GenericRepository/Domain/IDomainEvent.cs @@ -1,8 +1,9 @@ +using GenericRepository.Domain.Enums; using MediatR; namespace GenericRepository.Domain; public interface IDomainEvent : INotification { - + public EventTypeEnum EventType { get; protected set; } } \ No newline at end of file diff --git a/GenericRepository/Domain/ValueObject.cs b/GenericRepository/Domain/ValueObject.cs new file mode 100644 index 0000000..7679fbe --- /dev/null +++ b/GenericRepository/Domain/ValueObject.cs @@ -0,0 +1,6 @@ +namespace GenericRepository.Domain; + +public class ValueObject +{ + +} \ No newline at end of file diff --git a/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs b/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs new file mode 100644 index 0000000..c0e5f9e --- /dev/null +++ b/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs @@ -0,0 +1,7 @@ +namespace GenericRepository.Domain.ValueObjects; + +public class OutBoxMessageEventType : ValueObject +{ + +} + diff --git a/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs b/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs index 134782c..58c168b 100644 --- a/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs +++ b/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs @@ -10,11 +10,23 @@ public void Configure(EntityTypeBuilder builder) { builder.HasKey(b => b.Id); - builder.Property(b => b.Type) + builder.Property(b => b.EntityType) .IsRequired() .HasMaxLength(150); builder.Property(b => b.Content) .IsRequired(); + + builder.Property(b => b.Error) + .HasMaxLength(150); + + builder.Property(b => b.OccurredOnUtc) + .IsRequired() + .HasColumnType("datetime2") + .HasPrecision(3); + + builder.Property(b => b.ProcessedOnUtc) + .HasColumnType("datetime2") + .HasPrecision(3); } } \ No newline at end of file From 5ef05f822b3a73fe0c040ccc72f48eb735c35ce0 Mon Sep 17 00:00:00 2001 From: Nikoo Asadnejad Date: Thu, 7 Nov 2024 12:53:02 +0330 Subject: [PATCH 3/6] chore: implemnt value object --- GenericRepository/Domain/ValueObject.cs | 31 ++++++++++++++++++- .../ValueObjects/OutBoxMessageEventType.cs | 7 +++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/GenericRepository/Domain/ValueObject.cs b/GenericRepository/Domain/ValueObject.cs index 7679fbe..bd93231 100644 --- a/GenericRepository/Domain/ValueObject.cs +++ b/GenericRepository/Domain/ValueObject.cs @@ -1,6 +1,35 @@ namespace GenericRepository.Domain; -public class ValueObject +public abstract class ValueObject { + public static bool operator ==(ValueObject left, ValueObject right) + { + return Equals(left, right); + } + + public static bool operator !=(ValueObject left, ValueObject right) + { + return !Equals(left, right); + } + public override bool Equals(object obj) + { + if (obj == null || obj.GetType() != GetType()) + { + return false; + } + + var other = (ValueObject)obj; + return GetEqualityComponents().SequenceEqual(other.GetEqualityComponents()); + } + + public override int GetHashCode() + { + return GetEqualityComponents() + .Aggregate(1, (current, obj) => + { + return HashCode.Combine(current, obj); + }); + } + protected abstract IEnumerable GetEqualityComponents(); } \ No newline at end of file diff --git a/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs b/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs index c0e5f9e..6409733 100644 --- a/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs +++ b/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs @@ -1,7 +1,14 @@ +using GenericRepository.Domain.Enums; + namespace GenericRepository.Domain.ValueObjects; public class OutBoxMessageEventType : ValueObject { + public EventTypeEnum EventType { get; init; } + protected override IEnumerable GetEqualityComponents() + { + throw new NotImplementedException(); + } } From 07c180bb50cb7647ac794015441d08efaafeb78b Mon Sep 17 00:00:00 2001 From: Nikoo Asadnejad Date: Thu, 7 Nov 2024 13:27:11 +0330 Subject: [PATCH 4/6] chore: configure event typr --- .../MoqData/SampleModel.cs | 2 +- .../Command/IRepository.Async.cs | 2 +- .../{BaseEntity.cs => Abstractions/Entity.cs} | 20 +++++++++---------- .../Domain/{ => Abstractions}/IDomainEvent.cs | 0 .../Domain/{ => Abstractions}/ValueObject.cs | 0 .../Entities/ChangeHistoryEntity.cs | 4 ++-- .../Entities/OutBoxMessage.cs | 7 ++++--- .../Enums/EventTypeEnum.cs | 0 .../ValueObjects/OutBoxMessageEventType.cs | 6 +++++- .../Infrastructure/Context/CommandContext.cs | 2 +- .../PublishDomainEventsInterceptor.cs | 2 +- .../OutBoxMessageConfiguration.cs | 5 +++++ .../Command/Repository.Async.cs | 2 +- .../Command/Repository.Sync.cs | 2 +- .../Query/CacheRepository.cs | 2 +- .../Query/QueryGenericRepository.Sync.cs | 2 +- 16 files changed, 34 insertions(+), 24 deletions(-) rename GenericRepository/Domain/{BaseEntity.cs => Abstractions/Entity.cs} (85%) rename GenericRepository/Domain/{ => Abstractions}/IDomainEvent.cs (100%) rename GenericRepository/Domain/{ => Abstractions}/ValueObject.cs (100%) rename GenericRepository/Domain/{ => ChangeHistory}/Entities/ChangeHistoryEntity.cs (82%) rename GenericRepository/Domain/{ => OutBoxMessage}/Entities/OutBoxMessage.cs (82%) rename GenericRepository/Domain/{ => OutBoxMessage}/Enums/EventTypeEnum.cs (100%) rename GenericRepository/Domain/{ => OutBoxMessage}/ValueObjects/OutBoxMessageEventType.cs (67%) diff --git a/GenericRepository.Tests/MoqData/SampleModel.cs b/GenericRepository.Tests/MoqData/SampleModel.cs index 3735d0b..9c6afb3 100644 --- a/GenericRepository.Tests/MoqData/SampleModel.cs +++ b/GenericRepository.Tests/MoqData/SampleModel.cs @@ -2,7 +2,7 @@ namespace GenericRepository.Tests.MoqData; -public class SampleEntity : BaseEntity +public class SampleEntity : Entity { public string Title { get; set; } public string Description { get; set; } diff --git a/GenericRepository/Application/Interfaces/GenericRepository/Command/IRepository.Async.cs b/GenericRepository/Application/Interfaces/GenericRepository/Command/IRepository.Async.cs index e995cf9..4ff1312 100644 --- a/GenericRepository/Application/Interfaces/GenericRepository/Command/IRepository.Async.cs +++ b/GenericRepository/Application/Interfaces/GenericRepository/Command/IRepository.Async.cs @@ -4,7 +4,7 @@ namespace GenericRepository.Application.Interfaces.GenericRepository.Command; -public partial interface IRepository where T : BaseEntity +public partial interface IRepository where T : Entity { Task AddAsync(T model); diff --git a/GenericRepository/Domain/BaseEntity.cs b/GenericRepository/Domain/Abstractions/Entity.cs similarity index 85% rename from GenericRepository/Domain/BaseEntity.cs rename to GenericRepository/Domain/Abstractions/Entity.cs index a51ffa6..59babb0 100644 --- a/GenericRepository/Domain/BaseEntity.cs +++ b/GenericRepository/Domain/Abstractions/Entity.cs @@ -1,6 +1,6 @@ namespace GenericRepository.Domain; -public abstract class BaseEntity : IEquatable +public abstract class Entity : IEquatable { public long Id { get; private set; } public long CreateDate { get; private set; } @@ -28,13 +28,13 @@ public void RemoveDomainEvent(IDomainEvent eventItem) _domainEvents?.Remove(eventItem); } - public BaseEntity Create() + public Entity Create() { this.CreateDate = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); return this; } - public BaseEntity Update() + public Entity Update() { if (CreateDate == default) throw new Exception("Entity State is not valid for updating"); @@ -43,7 +43,7 @@ public BaseEntity Update() return this; } - public BaseEntity Delete() + public Entity Delete() { if (CreateDate == default) throw new Exception("Entity State is not valid for deleting"); @@ -58,7 +58,7 @@ public bool IsTransient() return this.Id == default; } - public bool Equals(BaseEntity? other) + public bool Equals(Entity? other) { if (other is null) return false; @@ -69,7 +69,7 @@ public bool Equals(BaseEntity? other) if (Object.ReferenceEquals(this, other)) return true; - BaseEntity item = other; + Entity item = other; if (item.IsTransient() || this.IsTransient()) return false; @@ -79,7 +79,7 @@ public bool Equals(BaseEntity? other) public override bool Equals(object? obj) { - if (obj is not BaseEntity) + if (obj is not Entity) return false; if (Object.ReferenceEquals(this, obj)) @@ -88,7 +88,7 @@ public override bool Equals(object? obj) if (this.GetType() != obj.GetType()) return false; - BaseEntity item = (BaseEntity)obj; + Entity item = (Entity)obj; if (item.IsTransient() || this.IsTransient()) return false; @@ -107,7 +107,7 @@ public override int GetHashCode() return _hashCode.Value; } - public static bool operator ==(BaseEntity left, BaseEntity right) + public static bool operator ==(Entity left, Entity right) { if (Object.Equals(left, null)) return (Object.Equals(right, null)); @@ -115,7 +115,7 @@ public override int GetHashCode() return left.Equals(right); } - public static bool operator !=(BaseEntity left, BaseEntity right) + public static bool operator !=(Entity left, Entity right) { return !(left == right); } diff --git a/GenericRepository/Domain/IDomainEvent.cs b/GenericRepository/Domain/Abstractions/IDomainEvent.cs similarity index 100% rename from GenericRepository/Domain/IDomainEvent.cs rename to GenericRepository/Domain/Abstractions/IDomainEvent.cs diff --git a/GenericRepository/Domain/ValueObject.cs b/GenericRepository/Domain/Abstractions/ValueObject.cs similarity index 100% rename from GenericRepository/Domain/ValueObject.cs rename to GenericRepository/Domain/Abstractions/ValueObject.cs diff --git a/GenericRepository/Domain/Entities/ChangeHistoryEntity.cs b/GenericRepository/Domain/ChangeHistory/Entities/ChangeHistoryEntity.cs similarity index 82% rename from GenericRepository/Domain/Entities/ChangeHistoryEntity.cs rename to GenericRepository/Domain/ChangeHistory/Entities/ChangeHistoryEntity.cs index cacd817..6243795 100644 --- a/GenericRepository/Domain/Entities/ChangeHistoryEntity.cs +++ b/GenericRepository/Domain/ChangeHistory/Entities/ChangeHistoryEntity.cs @@ -3,7 +3,7 @@ namespace GenericRepository.Domain.Entities; -public class ChangeHistoryEntity : BaseEntity +public class ChangeHistoryEntity : Entity { public string OldValue { get; private set; } @@ -13,7 +13,7 @@ public class ChangeHistoryEntity : BaseEntity public string RelatedEntityType { get; private set; } - public void LogHistory(BaseEntity oldEntity , BaseEntity newEntity) + public void LogHistory(Entity oldEntity , Entity newEntity) { OldValue = JsonSerializer.Serialize(oldEntity); NewValue = JsonSerializer.Serialize(oldEntity); diff --git a/GenericRepository/Domain/Entities/OutBoxMessage.cs b/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs similarity index 82% rename from GenericRepository/Domain/Entities/OutBoxMessage.cs rename to GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs index 35986b2..8128a8c 100644 --- a/GenericRepository/Domain/Entities/OutBoxMessage.cs +++ b/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs @@ -1,9 +1,10 @@ using System.Text.Json; using GenericRepository.Domain.Enums; +using GenericRepository.Domain.ValueObjects; namespace GenericRepository.Domain.Entities; -public class OutBoxMessage : BaseEntity +public class OutBoxMessage : Entity { private OutBoxMessage(string type, string content, EventTypeEnum eventType = EventTypeEnum.Internal) @@ -11,7 +12,7 @@ private OutBoxMessage(string type, string content, EntityType = type; Content = content; OccurredOnUtc = DateTime.UtcNow; - EventType = eventType; + EventType = new OutBoxMessageEventType(eventType); } public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) @@ -25,7 +26,7 @@ public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) public DateTime OccurredOnUtc { get; init; } public DateTime? ProcessedOnUtc { get; private set; } public string? Error { get; private set; } - public EventTypeEnum EventType { get; init; } + public OutBoxMessageEventType EventType { get; init; } public void Process(string? error = null) { ProcessedOnUtc = DateTime.UtcNow; diff --git a/GenericRepository/Domain/Enums/EventTypeEnum.cs b/GenericRepository/Domain/OutBoxMessage/Enums/EventTypeEnum.cs similarity index 100% rename from GenericRepository/Domain/Enums/EventTypeEnum.cs rename to GenericRepository/Domain/OutBoxMessage/Enums/EventTypeEnum.cs diff --git a/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs b/GenericRepository/Domain/OutBoxMessage/ValueObjects/OutBoxMessageEventType.cs similarity index 67% rename from GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs rename to GenericRepository/Domain/OutBoxMessage/ValueObjects/OutBoxMessageEventType.cs index 6409733..2df8f3c 100644 --- a/GenericRepository/Domain/ValueObjects/OutBoxMessageEventType.cs +++ b/GenericRepository/Domain/OutBoxMessage/ValueObjects/OutBoxMessageEventType.cs @@ -4,11 +4,15 @@ namespace GenericRepository.Domain.ValueObjects; public class OutBoxMessageEventType : ValueObject { + public OutBoxMessageEventType(EventTypeEnum eventType) + { + EventType = eventType; + } public EventTypeEnum EventType { get; init; } protected override IEnumerable GetEqualityComponents() { - throw new NotImplementedException(); + yield return EventType; } } diff --git a/GenericRepository/Infrastructure/Context/CommandContext.cs b/GenericRepository/Infrastructure/Context/CommandContext.cs index 612808e..22a4b17 100644 --- a/GenericRepository/Infrastructure/Context/CommandContext.cs +++ b/GenericRepository/Infrastructure/Context/CommandContext.cs @@ -20,7 +20,7 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) private static void TrackChanges(object sender, EntityEntryEventArgs e) { - if (e.Entry.Entity is BaseEntity model) + if (e.Entry.Entity is Entity model) { var result = e.Entry.State switch { diff --git a/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs b/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs index b6334c4..c118519 100644 --- a/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs +++ b/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs @@ -31,7 +31,7 @@ private async Task PublishDomainEventsAsync(DbContext context) { var domainEvents = context .ChangeTracker - .Entries() + .Entries() .Select(entry => entry.Entity) .SelectMany(entity => { diff --git a/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs b/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs index 58c168b..867c519 100644 --- a/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs +++ b/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs @@ -28,5 +28,10 @@ public void Configure(EntityTypeBuilder builder) builder.Property(b => b.ProcessedOnUtc) .HasColumnType("datetime2") .HasPrecision(3); + + builder.OwnsOne(b => b.EventType, e => + { + e.WithOwner(); + }); } } \ No newline at end of file diff --git a/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Async.cs b/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Async.cs index a611544..b680ca6 100644 --- a/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Async.cs +++ b/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Async.cs @@ -9,7 +9,7 @@ namespace GenericRepository.Infrastructure.Repository.GenericRepository.Command; -public sealed partial class Repository : IRepository where T : BaseEntity +public sealed partial class Repository : IRepository where T : Entity { private readonly CommandContext _context; diff --git a/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Sync.cs b/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Sync.cs index 40b99ef..2de8a96 100644 --- a/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Sync.cs +++ b/GenericRepository/Infrastructure/Repository/GenericRepository/Command/Repository.Sync.cs @@ -6,7 +6,7 @@ namespace GenericRepository.Infrastructure.Repository.GenericRepository.Command; -public sealed partial class Repository where T : BaseEntity +public sealed partial class Repository where T : Entity { public IDbContextTransaction BeginTransaction() { diff --git a/GenericRepository/Infrastructure/Repository/GenericRepository/Query/CacheRepository.cs b/GenericRepository/Infrastructure/Repository/GenericRepository/Query/CacheRepository.cs index 22a6da8..e2486bc 100644 --- a/GenericRepository/Infrastructure/Repository/GenericRepository/Query/CacheRepository.cs +++ b/GenericRepository/Infrastructure/Repository/GenericRepository/Query/CacheRepository.cs @@ -6,7 +6,7 @@ namespace GenericRepository.Infrastructure.Repository.GenericRepository.Query; -public sealed class CacheRepository : IQueryGenericRepository where T : BaseEntity +public sealed class CacheRepository : IQueryGenericRepository where T : Entity { private readonly IMemoryCache _memoryCache; private readonly IQueryGenericRepository _repository; diff --git a/GenericRepository/Infrastructure/Repository/GenericRepository/Query/QueryGenericRepository.Sync.cs b/GenericRepository/Infrastructure/Repository/GenericRepository/Query/QueryGenericRepository.Sync.cs index 1d74ed3..994af05 100644 --- a/GenericRepository/Infrastructure/Repository/GenericRepository/Query/QueryGenericRepository.Sync.cs +++ b/GenericRepository/Infrastructure/Repository/GenericRepository/Query/QueryGenericRepository.Sync.cs @@ -6,7 +6,7 @@ namespace GenericRepository.Infrastructure.Repository.GenericRepository.Query; -public sealed partial class QueryGenericRepository : IQueryGenericRepository where T : BaseEntity +public sealed partial class QueryGenericRepository : IQueryGenericRepository where T : Entity { From 9c0fed9e3d9520c5c97a7dade39bf0da6d5c0a68 Mon Sep 17 00:00:00 2001 From: Nikoo Asadnejad Date: Thu, 7 Nov 2024 14:15:22 +0330 Subject: [PATCH 5/6] feat: implement outbox processor job --- .../GenericRepository.Tests.AssemblyInfo.cs | 2 +- ...cRepository.Tests.AssemblyInfoInputs.cache | 2 +- .../GenericRepository.Tests.assets.cache | Bin 118870 -> 125310 bytes ...itory.Tests.csproj.AssemblyReference.cache | Bin 39664 -> 44261 bytes ...cRepository.Tests.csproj.nuget.dgspec.json | 12 + ...ricRepository.Tests.csproj.nuget.g.targets | 4 +- .../obj/project.assets.json | 459 ++++++++++++++++- .../obj/project.nuget.cache | 20 +- .../obj/rider.project.restore.info | 2 +- GenericRepository.sln.DotSettings.user | 1 + .../Interfaces/UnitOfWork/IUnitOfWork.cs | 3 + .../OutBoxMessage/Entities/OutBoxMessage.cs | 1 + GenericRepository/GenericRepository.csproj | 3 + .../Ioc/GenericRepositoryConfigurator.cs | 2 + .../Infrastructure/Jobs/OutboxProcessorJob.cs | 70 +++ .../Repository/UnitOfWork/UnitOfWork.cs | 12 +- .../net8.0/GenericRepository.AssemblyInfo.cs | 2 +- ...GenericRepository.AssemblyInfoInputs.cache | 2 +- .../net8.0/GenericRepository.assets.cache | Bin 52000 -> 58903 bytes ...cRepository.csproj.AssemblyReference.cache | Bin 27921 -> 32518 bytes ...GenericRepository.csproj.nuget.dgspec.json | 12 + .../GenericRepository.csproj.nuget.g.targets | 4 +- GenericRepository/obj/project.assets.json | 471 +++++++++++++++++- GenericRepository/obj/project.nuget.cache | 20 +- .../obj/project.packagespec.json | 2 +- .../obj/rider.project.model.nuget.info | 2 +- .../obj/rider.project.restore.info | 2 +- 27 files changed, 1044 insertions(+), 66 deletions(-) create mode 100644 GenericRepository/Infrastructure/Jobs/OutboxProcessorJob.cs diff --git a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs index da88244..4b3a165 100644 --- a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs +++ b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfo.cs @@ -13,7 +13,7 @@ [assembly: System.Reflection.AssemblyCompanyAttribute("GenericRepository.Tests")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+606efc5e2ab09a234f46c22dab96e198890c2f32")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+07c180bb50cb7647ac794015441d08efaafeb78b")] [assembly: System.Reflection.AssemblyProductAttribute("GenericRepository.Tests")] [assembly: System.Reflection.AssemblyTitleAttribute("GenericRepository.Tests")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache index 76839cb..ad2a7ec 100644 --- a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache +++ b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.AssemblyInfoInputs.cache @@ -1 +1 @@ -34ef494666a0784708e4b8525a2a773a4423ef0093700cd5120c2454033d40da +3e876b3afb501e7c313ae5ca181eb66106e069cf2358c449902ecd1446d5c5fb diff --git a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.assets.cache b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.assets.cache index 8747b248f65fc4bf189768d99835ccacf4f324a2..04fdde60131159f17bc72eac122e0a5f5e056a2f 100644 GIT binary patch literal 125310 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𝔳Cv09vt|NCuZ(VCqkR@x0V;~ck3kBp5h36=)7bs*J+)xMwX7HWEsjW$M9HQ_X#f=7v zEqKn@mpfjsVPIFn-l=2ginw7YW!#SlGhu}L!U!BkVBi?WbH-|ua2%g+meE7ZuqH_$ z?%yRsa|9y>f>AvCri6rhGrn<*+;b?a580um$+%=#&V8%kK88Ex$#L9$6_cRYK_9jY zI~%O`%c3CpQWuto;vBaLjuV38cHDi_KoKo5K%66sYxGMo{_%0AFr4=egZE8%_BkiA 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 WWb~BT3cS!(yDMw&E43S#r~iMxie3f) literal 118870 zcmeHw2YejIb-pBuqB>QqE>TbyC2;|eU{SFw5~M^(1W5r@bv*zF;KXaXLK1S3ExE{Y z@4dIU#c|ww9Je^OV>>Q!9LI5uf3*?BWNv$MN*C;9*TMaFu$do%BS z@6DV3_Ra1auG@U{K?fal%1Mtq^U0Tf|GW3UzcN(5=-SWT@WR`ld(^!b9{-i)A9>e? zyT3U3zk3co=rE*v=E1`^wacycaIG{u(`f7+4(i>7a%Z?%n%!GkDC2!)w$*4i<~u>T z-l=q!=3Av&d4Hp|cec?g2c>$cx^x%i-xQ1ln}*f%T%%J5o!R#AWK3aONa0#ZVVo#z zmK1`yYV{BxqW=!YMgLxg>!mpm9_W(`wRq8ZaZI1R(fp$6W&ntws(d-f6u82S|-RQPv%K|23<}j(a zNvQ;L$y4g>rFN%W3p(Wko#2jkqaLbm%%i&LDAOLwbUiYqqFEu(9FF@VJZKJd>y-|( zwNcobr5s^vMoKRJ5rW~7xX%oX;e6#lSu+mK7Mu^d2iNr;_NBYJs2NnjhDU>Ss9D3+ z%FHmT(+2!=bNFLecTi)fhR}aU;iAH&x_=C=V{zS{iA`lLs@PyPI*K|VShYK)`dq0s zw>D-uArg{OCEJx?Lu`-3MQo49b%TfPY^mL;3h~wl;3`>?bmP&Frg$fSF7Y`L7x8%r zu8N0Gd7d;F%yg@JVUe<72(`M2vnBm*yEf#w1!=dbv?hv^z?D#(jEhj5f@^Of6t$)H zomEsSCcPWROyRTN%%5$Y^ z6rTT28-YK`{OS2gCqFDxxR(YN}U4>(mjb*nW+h)o(5ohC=Mg^v|0@FI& zADbD|Y-6rG+d$KUA^7m<#$a8rR_dSnFBlu@1_N_*rQI!6r#s!bN+TFY=5diZm|m>Z zIIb~)YrVj=0rzrdTyv#PDL@N7Tdkmt8eR{>SS!^;{g)c*Z>5xIm&U`C9Kl9`V3R;_ zIqq}05m2iyx^kL#2;;P4FnWk91OOVtkf~mYtC1Oi(Kh=q7)`Y~qPWVy@=!cKJ;xM6 zZ?6eVa>nD(jt$vnHe2FlcC`WXVR(K@Z!lZsYKbO2B^m}fi_ivgD$dCvUSmMqjOTlL zg9t;43%bcL6Ib321J@*;UrEDO8EeRgipPmDF`x zQFZC-tG-$+7gL$K_}VEUxgD2pRe`OXE0b!rDz!?dvJaCC8us|xz1?vJZb%OYf0}K} z;(G-Cy_ng=<&s|@#_?mp2DZRJ%W!HSAFui)NAiypARdJ~Ddo|)?#tdt7$^c}-nBM{ zg?Ui1j$#sdxvCxmRHQ12vV?y>A-Af+20*v*4Z*tgssQa;i&_Aeea{GJv$&H2=WsnS zzXBs{v`oLhJkx3H#Zo7hEV6>5mHJ!CGkd~(TybRs-8`N<1r;aTtL(63+rTQ}f&pj| z&j$(uYPK4k#%!aSM^n3H9z!c)bV_0W;mFmMRTA)Oog;XLp8bJO_~~xCuczofkrNr zHSwI?=oOmIQj^w^Hefw#WMm}RAXg|9BEFcU5bdFSytM8VfLgdy8_~vwSD zwC5YGTF{uGL1Nfk*jJU-V%1AE{dROL)%FfAtHd!!S*BWSBWtg!+UI&IN5U&24q~BWOESCce9XFUJtPKlpsL#so>V z=5d)@=l)>KWP6VVu%{NR&IB`S6>-<)@kXr{d0f!SGW};N?{Rqdj0Y8?qrEYKQhSqq zO+IHSOKtOB&IIsy0LVTF*k7ryTN|*c)fje6M&!nX>~d*}qdK=+!aVlb)f2#-rVMxE zqCWSDxUTXUedA8dSVlJ~4~lR`(72O}`6Lh`!uQ}J!uR6x?!JITIl0b1ypg7lYF|il zv#p%6p5@8lNC=*Six4~&*Nr~W$XP)QMH?+_(ya^D%kfOO3PSz~VxZY*ae1Ex>cs6n zT*U3^xE|@@h8;Jt^|{pUVi6tu*fdKPChbV>EO*3~=h8H#$uRL{mmsGfuCNxlZb3QG=qXO>W% z0FCwo#kz(Unq2+gLV3B;o(nhx?|HZg-t%!i+*@4xJMgU|2f@%$>~a`oyhbLW5W1b^ zIAQ1<#*Fd>;6r?0h>Q5X2-jvG-{u0WGF(K7T_eaCcZTn|R4)cKqW%(GME#|>?#@Kr zR__AMWoATGcgEaS2c_T4jXOBDmjMf5I~*5bdpWL0`LL0LW)S;fwy_Nh$1QvDcdtXz z*x^zu>{oylv3?~kV*M&yJ}07PqgJjqtZI=SO{_^GjqHwc*ff%GYkD;h5Te)MB1Esn zHSSSHd$!euKPH-9!$)B{`hhF^b)ZM|UyqCEzX6xeM*%j5I^3MCwo3b>4QHxrmg(Hc z@bryT-FJ`gm=Z}j?>B-M@qQC7;{9e^Ufz*EC3gGK_>wCoq_p;H8-|7J<>qD+?QrO| z$*R{|z>9dx?(7fn@7sKOjd({3gkr|X*DI;J5lo|n!NeTqt%9qZNxu!xrHot~)hZ^c z*o0}jL|zwjS82Jv-!8aIncsnDpHGNzdc~@cV|u57=@0Ro zwH&C4t(G%@2-9({?=ral5uSZ}4nh;~@>!^3>R6dY%Tb=`E_nHGWjVG|4vysA29iI< zvu^{@hD7lQy`8Z-#=0D4m>QTkQ{*DealJ?2dN1x&H{XZL=hkV#Ro(|P!9r(pVShTR zOdQWPN{ls5j^q6T$8v$=1GpC`sZN8IH62YwTx&U)J(PnZ`Jg}|YtM)9>>G|-G(uio z*o<~zSug9bh9%0w(R|oI^ASAzy!j-WrFsebFhQ$}5p<2}4@@QD*+nx0SwaK90*bco#4hs*M>8BJT>9Qe5hYFGKArKgV;%$^uLTA~KOI zY9ZdjJXpzm!9eguJZJ1}Gz6K}6{L0U3K$ss;=-21-BLt<-6eA$<(E1BrM^ zeA(dl6+CC`-H0EyWu?tITZ?%78S>tyGH@JUHE{eTo->XIBS)ctyiY?n=-3%n&M#@~ zFN#3;2ZjEp%o@HXxPKjYY7@SJ%Qv-+EHJ?QJ6P;=nl8=9H5BU+!FD9%Qh!tMmF>e{ z;W=abKzy^TX$irJyWQfxWnlPgJZIEAVQ4pI_reQ0llaq7TCRa_8{GdUJ9oZcyU2y*v^8lCVai1_1C*_iV*Wmqkc=pY(h0Q76%q_wNBes18gE>U7 zTJSvs(f9G3aa_j`)ykccsEah(wk$gdlVo@%MINr79|$x*#GUHok8tJJkH3o8^kc6n zKNg5&ZT)*Z`#i_u5^IOEk#>L%J^WVmi5bGE_3>l*l<5<>b2hiGl1N@SJh( zsK&n5jzbx7a>)BrgX=%y*}GmT6(Y#d_yQeti}vR$__!kI*4w4|ayV;?jfc(J5+00rhUJ+`<}) zu1Yy}p)ZZ5qXhz~%bg+v$MG8j$G_v*yO(Gv5oJny8PPOUA6ro|I7ijUBo+V zjs8vml{NOi@a)^#77DfFoDG*cXtN5PC4D(2Y72SQh!VEr8?S5YK>sa({SWS>!T-hO zbqq*F1`qMZT*^vJ+_c#7Z4=qK_9#XJUsOIA&spu!u0DT9?ty8y$3qOD%kb>=rAgH$ zdFf$!x;z&Sg0Rb>20^stky_N`pBLseCn$#sm~!!NIi6o~aJG4&U7rWmk6b=mZgnd2 z(m7gSkS28uo^Q%#Q6YwKKbOoq4hq4{ zJ7jHc##EHevGA}`s6n>#$Kl!MgdpmF zXA#4lObzEAnUWX4@doD;@SJf>7;_FfrS@KD$ER#E=D&y1a}*~UC>~M>1y;|UQ<=50 z1yNeqL+Lq+lMECm<2mCv>OifENmXgC+}e*}fEz}vj9ZamD$H<8n1SOs#lUeYo-;OC zgyXnuic#V)9{g};v82Aj%N#wL%92vU?N&#ayCO=#~2f0?&0H3 zX*ln54BqGB*%y_<#=Cp~154VF_5p|!22lVk4(2=q%=vhx|ERU}H4A+TX49OTp+Ot{ zcM>l8_sO_?717RJx_nUKvu~>Gv2-GD561sg#^1N`GqkAXEFr7&&r$#P&*3+t6?}+F&w@fRp31NJYD%R(Pze=M;uTQepKKkW!>o3?-Y?bNfGweTy)s}uAvj47X6eT*-o+vVS zN^rI_0hShEy_9C1GlYlZSpj)fFa(eq13U+R(p`m(gv= zlZrwIw(0Fz%5&Hf`Gr!PtWxj@EcDZH?5F9)QmaWXPgO6&xgeAjc~a4j=evFkrgu)r z#V<;DdNLukEwWS@Y(qUV#U+Y>B}Kr$rXhY8d6LU$j+FM|^t39D2PIyeo>;V*614{g zQY(8J^HPq|CS+ZgH6x4aV2Yx?{2jN1SD@7AF)qo}(RL=KW4`Nb$_XQ7Aq&jX;w7MH zs}I!UZ~uwGdMgl1;)J4@wK8ZbXXva!EY7sD5TANd0&WEgu>2O(6wgjhe7;TO&bIPX z>qM01G?hlSw}GmN43P0_z(l2Qj)@jigiIYds+hxd!w*X zWvZ9I?3$0Cfu#wh-;NEtQPfrX7B}jsPlUwNBF1L0qcVfoGE0>7IPBwVUp3In zRp!e;`^12foNG-Y+riM)pOURK-0~qQrpZJqIN$mU6)Np|3Xd>KxXPXoWgU8&P?Ax568lO%9K@^PaBp3nTuk4SGG7B_ z(C)U&!6<^$^`fOD#W8G{^g{8v7-RbYKEK9aZfdcfV*6?orp2^(twh#ZL|~YWxnVI< zJ0z*@47M4&!6;l?d$QI9LF~!*n_z*GU?Q&&-*k}GAD{TzB6=Hbq^j>A=V&5)kuhl02^!hBBTD?X^l`j62Vs)H?5685@nQ-c$)DjSWC$D~bb*do1 zU7^!AiO5Qkkhl6$LVBlO@ITGm`4qOdi4`h%(B$ClCdOe-0%XHE0`20+E$D#!xP4(vq+= zDEjRpgCa)jR(}zm)-h0tT{bAKECYL5xKCtA)DBl&E)WRql;jRGkvl&%CF_=?&~}o# z#a)t0RC5j>3~N%8n>+KAL$+Swz9<(*wqDu~Yz|AArLk#g!fj>x^*8}0{FUaZ^irBx z_%gWfb^TxkG4BUKP(To zedu2&h>a|^*+#Edir0LF>uB*V+!>=pM@BDZ#iHt|(PKGkwb(uur9I2`W4wPvDNc)0 zw7Qr#wt{_Okmq(7p|H@X#~F=i8(O5+$aiy%=RQCr)>8)vW?=mvmH}s8RJ0G zqTmHY>nRReYw_Drq0XXhI+<@B-cvr>fwVy%qu-pm4r#5IwAKq+8yvJY;ywNjI@{xD zfg}gfB1yl_0>S1q?dH*cN8zG>AB}5JXMiwvD+RmbaKFJLb>_1_82u9j{S$G2fVN2) z_XlO0l<|L%w@De22Wgv>A$U-?Nf{2lO**)2@$NN zhjS_zg4IG$+I#K&d08LjgNPCHUOWQ?b>0I1_>4p)ER^0uY|xzq1e+(47oup4L#6>Rf!1 zK|jtwV9<6mXx`7&tc7ZUmh4jEZy?FJeli{gsMU@@Ia0*_8k!3R?_H)CXy2Es9?Z2K z&OBgh+#?X(gu8c88H+ELOt3*Bk8(|Z1YuQ{^c7(UZecnp)^b$cr^zzM*Hk>N;lQB` zTp{%oJKKP%ht`o~Tj6s)wVF&bKB6FF8L2fdn{ zFmw;**#!*JjDSQzcAl7hOjZ$x$cBwe7%>vxH${Peazwe;yrj4dl^H5u3?gOAIw(=u zbHK5*IkY1|m5S8k`vS@Zq$$rE$N@$9a}_v?40i_CTLWz+luEj0e~e zouS~4=-E;9B^WY8@dTj@`h2c<5M)O1NrK=#xZmhmFAhI3!8%OjH;0w@^w7hM%hLpx z`*8Pt?N=`za+qv_2Q z;xE-z#Na!y-8h^%v@qlM0>STvxNr6tTRlCbFr)fnLG>lL-<^r7HD<2%0h95WZ6-%d z-u1mqV4|(7_DJs|AwR;NJ5$JB;q@1l`x;?pro)N4{qW zk3tK_n83K=eZ#<{&!aHAD>-&d$Y zLKYy`C1U(3?l^OqV|sl%lQCncLdKO==6ejw%dotYVaclRoZ)yGw|6mazWJWeH+Ca> z4#Ue3yqh8LtyS3&C^S8U-(`5-Bk;Tzci)Go7Cgnm?lS)G7yN0htU!qr4Y$h>d{7{u z8t)tESv1f~m|ceA!wiM*<4=jA*YLWG{YM3R3a{(iEfef}39HLEe}W0_8@Smx_aU4v zL-R?7#y5o(X!QAOG@C9MMwbEklmJ3g*uI9(WjsE^gv}TpMGsl)?SKqNU&i}$jCaO9 zNax*axLk(i^9)NyJIkX6F6>7Z~S^y@AGA4(>O=ujB5UehKYj zZkRLtE#vo1CS}I@P5ju3vLkwCY*RZm2Y7Bt-(tKoYM6Kz33tmR{&s$@MZ?@OuHRu? zGtN_5am-p*-BFP*hDCDOM#FZy_Dg*di0g!^HK6tT6 z86X~u)Vp^s45lrEuxe3UGsk+ge@7#~W#K&#Ioi{15zU*uo_?v|XsfM1Aw8Mycu3FR z&rqHWEDzSUZ&h?a)73w--yqUyvkDP4V#Qgi(27URgHVP@=lVvYr) zU^4DJ3TA%pg`!_F?mYTs#*PoUdyIO?`17cj8EZH3FBPV3E$_^}|!G0tzg8e95zTJ=P3cqV{4PsFA z+7Lb(m~7Y|gZG5Jgp07x;OaN_UYnI!V6tJK!+XMB#zolYae3FKl;Y#>mVyoNPVQ)vpIKwanp;Mv4j#CsBhccB9lL+eosiBWNg zafc9tcc}vtL+fD+iLuuqMpcNxyV!w=q4l_h#HcyMs0%T8mpd>qv>v#S7!8LQO(6#F zf(Iss)*}}Z<4%VdEg=T)lAnCAXECB^OJ(-Zg(PV^BCeqxE*->} zZQ=uNI>9dBd%&X`;pQG6u|bo6_>|HiVmLx>GX6qNi&s02L^pNloQw)iSd?3M+9bIn zdU%T8Lp}Us9a23`NcDK!snR?FSB?*adz9+tFv!t#80097C2Wh_n@zyG0o+!do{0BU zow$GlEjDdEqt{}4l0&L{gj9TBHqc_zr0Qd_-RltW$rb?zT5Q_rv)5vKibJZW3aR)& zbfCqiN!7<4RksN5TX;SsE*k0lg@TC?32U={+Y9A*6FLOxs zav{|#aHk2tD{&39*fgp7SZuEXaN7jn)p$=604`vTAUU1f^EPvlqt^=e8i!!76@uM{ zJCz)*cf5L#6H-&KJ{I2VfZbMjug7~TJTBuv>zuZ((`(7S!6DTfg;acrXP|XXld6x! z_9lmbZ?*_H&|>TGZS7u*?JW+e{y<3eR@|w=y$#nui%pZNkHz+O0Jqh)ci=tMHZI_c z2HBz{mmhmAyLUQ7`$HjG33n&|sMO2$*MSphc*nqsyEH<~Bzh zD^_dNvkCSghhQJJ2sSuN)RvcxCZxC}e#9Z$M}=&B^?Y!am?B#dOZ=EasE=EO8k{9+ zLiNWIKj9GUPb`8B&Jwj1^S)W)Cmpi=sgR9t2n@~=Q)DY*iJx)^^=XSxgR?|UsQy^u zXB>ik)*{&8EK%D8=$j>e&LP{M3EB7_$KWh6MYbZA_<4s=e{Kzw8j|D;A*!XNj6n{jtQaIt2Smi(rGZ zL~X04Z{Ct%xQ5jYFvKScDp!C2B(T#}fb6A=q~oS0 zWc!|wjc=z7&Jt5(D`JV?cL?=5to zg?P8&POJK~1^WC4NxUNV_!Ho@t>ga#-qSihmur9xi1FQAe@ybH4%z&lU&xLG!V|Q?kV~T7=jPVx^p?+x*YH*FCCRBec@t+)m{mLTP;A)w+ncFu@{AY)3 z{~~1LTe*X?#1z?zSmM7rg!;8bsKHsHCRBec@!uSR{l+3#QO|;ociYdq>t1}v<=-6w z{#FRcH>Pu(O+qroAJ6nIU=f@A4~Jy`X_4%u0~>-Qi>^P0`8$Vn|7DSG(1yvk-22u} z{;-b8bfl)25p#Jvi=z6!H~i>LO#SIT@8*1{W@TM zu3Dv&(&)dVaM8!|big`&N_Q+Sg0u`Tuf+W-To1){D4qv(06T-T66^^M9l%a-j>lz# zvmA+T@O;Oc`G9uDpC8ap{2$`re;D}tLT{Dl!(c}<-RfQuCy9;#q<1)5jv^wl^Y*q~ zOP@UkTacDTatq%vbo>B!LU)P--3p-dh32xO3lAyE3U6`=-=GEz->JYurFSwe!gm@j zTj?E+M83!bmlqzr4v z*h6&R^-Y!%&5B|77SSL^3Xua!i51G%PTUI53?6Oxa@{&CFJVQhTXBTfs?G zt@+X{d}7dCss2;p8)csqZ9%rplx-r;#<7kHtZN0<6M@OrN<0MbeUV&Mz!1cbEzdUg zm0P8SvfVQk*2X|;!^m-D9v7K|>BUNo;~f)tWypgK4&9yvyuPTI3a>BdmOEP}dmHH#?x80qFPiruk?n z=rv=TsU*jRTMXRe4%}w~_q{#ijt7X&%I83x94KxzfNygEKMTO$)F*iuv`!D0p7Olx*=sWO+hMyP@Oc1dJnj#rNDhCmYzfzF0N z-cb6i?L5#a*W0MXm8;bzEe1mB#e~{BqoBXmo=E{1Cur@7nnk zUI2&=F$$HR9ra|n)@UtpW$!TXPCD?O1H3sl1UTSEeZI2LZG{bJA(d+cT#Dam2(rr| z$hi{6wE2M#%aDP>gu);Q;c%*o4Ow*mb|2lVp*{WUonr&Q=g zO2Q_Gt30L*p{5-|oe!aWXX{uiu_}(}yjF_ZA5R;c^;d~7i4m{1fV4*-rXbu@b#Hbc zz5s~56TWyX$!Y>7e)ueEA*0dkh*EPyxkVt9jmxbLgckx~v6fLlEMgoIugf3~HNfBI z0DnrLTGKy1_#Xa;GZ9*Ai24BR6HxJThmwdm0faF+nw zec2l`106f7B&fA9EYE|MEpksHFE@e504iY2wIpsz>1Tgo$g8hbJJ;)*UC zsOKH1*8sKe^j1~Zq?JUVWqX?)u581YJuetQ7ac$Y06kF9BIwkl2F~Sf=g{nKnTKn& zVt~EF0d^Q*bL_?HYK_qb4Gf4Xb6B~nV>na@`z}zJn8Sh|QQ(s7H6*DzBpHDu*`vkl zg5tvdfNeX9f0OoU(lRfGDV10XbnFJ9v+qfH-o}<9l*x`{Qm5XaNmH- z=&!C$#KgbPfqy;lKl_2fuPsk&rLb#;re9I7m{JD&9Wrcy3^|rFwKAZG^vDlR%dxtC zG5BU&ge3?3jewt{AMY1@hvA#3(+oeyN@kx>8(u#t+P=%7?M={jj;U0CaQkYjsr0nk z>O1{X^*a5*u0oomX#24aZC?&;=ZIon7_qx;5dl6@us_a${R&|Bo`u>6ZM(5M+C|e^ z(%QxBdt^CvPsyp_zJr$P?*+Y@&MxQE{ zFftQ^@Fa{^QYqoO7KA$Oz2_471vB^3AJA{0-@WkYc_68X-$#2LQA*O z#pWn*u!*kP02vv^$@9X=VQHFDazyt70U>$@E<*H7TsA}xL!u>*UQ9$mr4h87Se7o4 z`%~z45U#Pub(i0eyn z*|?4)(cPK2+S-Reb0Qp3%@qS>Yb&HD;f*^u=9d8@VLlueVSYI-8|JM@^e7+Z?n1c} z#QWZDoF_TzGOzA+NE+|bYsT~nKp;r3#6^%^h06wM8xr~4Fq@59x!SO*QTmFqrj|6g zJIZ0xV8UVa)j&o_UxSN~z804a>9t5S?onQQw$<&Ru^ltLr>3JHc%i)xe2DMsaS`7) z;Ii?(4vBo;Q?PBcLCx7}tF%AbC1{#J2zgVY(X^VVb~$4b$~_ zf19s-B1SXa`T26I?E*9^0d0xWaSh!7E*#Ac2b#(3XrhJoaII2z1f)TOP))SJo|x;t zRp>^p=)4WjHr?z58lShDIF%afk5x>oqYd&#eYV?bVSM9KReVJCILn4Y6xq1u-YKxk za@^(6+-|)0PPJmNd{Y^ArnZ=Cr8*qoTFGr7sZpLd0A!VQGRn%q-w06ni}!@49N?$% z-nXAGu*02lp^l+&Wfl#m`gfz-nk{1ymF;3OJJ_lc2I}9_VJ43EJwn;<#hoh6`*7I| zV-N89y!0)2%llvxSXXyyS7B=h+bA)X)H%NQ3w+B3z7II?-2{9-r(cP0sb0doDrj}F zCsixMVxhu#Cs>U+Vw2q}GE7AoIJ}Pvcpnq+Zgv#+EqL!+DHZT+YtF$P`)%vx(@`rm zA$HfIS}zuzuivlDojxUi%3YsNJM?%ffM#p}FdUw3)S5W-io9fkyDH83N|n^P4$V=b z@s72Lp(Q5Gakkql&1;d3EA{gNt84&nb13z8yw6yNfR(@r6|;TS3}^|S(6oJj^-Bic zhdb~-0`I4@bv)Hdo#v-jO~&2e4kY4w`?7)Kkq#V>!uyPMnQ&n5RF;;rC)6=*QyDnE zuNwFs?ZEdKyf0eYkOOYmCB~<>$!bi_>7ww2GgIh*%Z3eK6R5t9JGFq{z-4Oz zOW9HJEdxg(#?`^G2=g6*O4flHhpuMv-uG>nu=-YcUUb+&xrVr8K4eoW{WhfMB{>JK z_=|^HWe2)>y!YO#2=uffo7DlgWF9oNN~Iq(Go_@V=N1@FBxZU^vcWnr?+>-whfc0YvoQ!)F2u`7)>{;LChj1MIMgw2f}85h&$D! zAK|jqq#98AT)2`bY12?SN4Ye+Ue68TP% zf#ds)fp5P9-vPY$?lu@ohqh_0^RCDfR~s~0zGx!nujyz&Dgi^sjDUUc^jjgof8b75 zv*ZxqF1+{cO$q$%GG>+JZ8qClYIYh6tx|Il5AdWM<7>+Fr3Mxq=zv#&ds=23=NZT0 z`ORwQe+$6>BLF|v0r+uv?{yqbMNIB8?Kb(UrH=#cu*p?sx~+MuJsyzo7aQ{v9MJE^ z`>e)dSGHy>R`jv4*wNdK<&cAQ0iNg(;7NGz-Lg;BJvl95b)!5Nc8pjmR2?I&8>Siz zxmtyJ&7tO@0={h6m*d&inA`*S3)u$1;UXA(%o}s?6mAFbxpVe7d(e9Z+v22fv*Tuc zw1Mpy2ex~G?WP>q!c~3JU%b)A^cO-hm-APM3MLn+k98n{*VaoyP?Q}U8L-azy;2crA% zK4X`4pjO2I{MEOx&r5 zJPUW5g*^+Xd^J;WYNKoKU^@`o59V;6dUl?QBUvSooGp+HIgmUXNPIgH5f3q-pP>`f z(M6+2_Mr;DuVmfvIR>V49hja2Ouo;Ieguz^+gUwj3xbqB<=Q}_? z7a%V|5oiBefV!suyE?)Ne?9h-)((piW_uVmct92~HM`2$EbN-F#j70hskx>9HsS(| zgErwJb9){hZ01JqDXP))aeo1>7vjq9S(}b~f2H0l>=yx!4K}?e*e}MNV7~-c4o5Q` zchIg^;&o)w{fN>%WLQ&b)rRXBKJP2LRX@Em3?m`c|5D(=-$5_K|B?D%jyuWm3fy^& zBYIDAyb^bk<5jqxe6XiuR_;W(<=8ORt0b=mLYpM?o+NnwwQD z2fZgbUXMG;@djLjlVj6{Ud!W+z-N<#-jf_}!ky%JGp_6n651kkE{G}-B)q)iW{Ii> zD+n}0m?qgCllNPI$A+8UoBAIBZl(B~xc|U`o8FuH{*bRG3ta|t z<(W#U9&93g%9bdInw&rkj_flueR3HW4W}m!Y&x3N+b3!}!{#lJv(0ux7Ta4P7XISN z=Gz?N(|Z#C?YNVFour~#~8-n03R=^+Q!KMIuPYQSs?xcYC;`&rp3kdDF+b##A>w>lY zQbK}gZ;E&y1j1jei1*{crU-gZiueHTq=*mV%CCqqtZ4OJ5t3+ciue!&!e6Y2597h6 z2zpP7_z3Q#h>zm>aAu2W9|%UVr9YBe30Mt`H?ZRtvBAmZ5g%Skw6DE{{S?_IehhNp zFP8t~c(BP&?@9ho;7;=Y39gS1UVcZPP*?-9Q_ytqNyvh~SO%xwS;1t@BH%3n&ay2MWzqJP>UI=v^+KZ83J|7UT1GOOs_8SI&KgHgD(^sQ4c zY4)au&p{mg#TM{qc(7Rjy(cw%9(Pj1pX17{2JB_^T@8|EZ)*4g#KB*zhA-m5rUrUX zYWNcFq=vu1RX_~|+CxWmkk)_zlVKa%n;O0haqt(b;VXEsse#^;8or7;@D2 zG)TF!xxGk{O}CftIYg%SB=YxhmnQX&fs4#aP_?OjmiPw_iRnE_{6irzwX)vB97G}8 zSK><5g$6cB7i-cJC@xw|yyP~Bk~3}!?CWuxV`{vK_?^*2{Kz34y(j5@ETsE;+`XsN z6_n0yxP1}tCl2xGJ&DI#z(EzB)kymy-9I>_qxU4;PjQz6fUKi4yJ;$)sn{l&SUDZ2 zWZPmoQ2nDr9C}aU{EUgyn^)3oJ7aen`!U$-*mzs(e}4{u_=|@*zrcfSm_zSLAU@pm z26suVTo!>?`KUIdH+g>PkcZxrJbb|UqKu8d-QJ`lQ?@~oM=I&+#M{Ax02ip^qWUL? zX!PDJDsKR+)S_~UR;0YLNcJm-Wc1!FG;g5RRLNYc1kCq9S)!)_lxt>e67hHd#$Q}y z|LhQq-jiUwZTE&|P8ICH`jN|L;V4s?$N3BN{e0y06gP#1IZ+p_%f~e79O%8lvwUurobVEf4L-*m`IQU%pDp0hPnQpyV)C$9UKxeLTN>S`zquSdxLuY4Y`^0_aqeAJ0NVco&;J^xoa4`}WA9cs|AJ1NYE zs6`WV7b#~$qkS7ka~5pI;TTJIq3t@6XA_Ota#ZqQ(`rUR#U__AS9xf{F#X7x*7PE9 z^KsLW7faZ*lgoLSXKbbLb(LtAhjshN&3AQyk$@hCwP&C?W_PKxI8hhUohH7KqYtH2 zQtHZ&jUMGE*~pEcC}S5`zNym_Qr@G+OYIJ}jEU`XL{kYyPiK7CkCgay_bGgk40%_J zywt6^(-NsO>_3MAP%iOOiQ}XU*~!RAG>EF>rKQpmt~2cf;dTWd^h>?OqI5*)Y$u_} z?<~kdOC$xkm4-bp5Buwj1QE-bX0f9ffjP^a4!^E4Xd7M6W$w($gVRnoX{ly%1wlqL zd9jWm- zD)AcJlE-|VrP>0^;aaHW_}>`5h#tm>LJ`YwCfCV|Fh2w9u+fe9N^9-aLL9L)0v$8Q zUo8?J&m141b*dt+J7}XhfMfSX0x(r+S4z^}>B%2aW5Rajd;!o-f>I$rQ=VZ$)HF#O z)Ja$p5~)iR6k7`3h+l4n=F3G)E>35n&Q#i%nT5(j40unZkJU*b6e>;XcU@)@$af}@VAYm+XHuVo){iXkc=qF794@NgA09Ly#<@QsfFfEIRr@T7sQPG8@sqAgPQfALdL3u`Z+wd;7IzaWprd@B-kL;tH|VstDg)s;HYSNU-_`O3X;{J(l<8EFiTht~EzfiphTYi{X^GHzHbQZ5)F>b-7VywF z%ZVDbbQv-c@iQ#xWE4}ra+;FNCG4ICo$r+p)(S05ON36hFxt~9;WYY%WG4`ZO5=JH zsfpOhl9(R;6#W8}HM%ANEjB4jywryXTAKIvrEU^hIs&uGMj#k3RdK{>snuSel~kOA zh@LHo>SIofQ*`tKEDB$V22@-MJDdVA@!jcC( zY>y`^PYSNG@nvyC!`-2^a%V+r`J>$>mX?686i6^Q2)(v1OdyC0SSF!t(mLp!8qB3w zhn|o~NbvN_bYpfeR=HC;0hWqqX7h`b%q$gUmfhV{96mJJ-Nm&*C8Dfn3U#r!Y9_xf zp}V*(w5BJ5vOQ!8WZ+5^B^r9$3@-^n=5b(DMU)MrN>2obVt(x~I(IvmDo6hk;l($m z3GT>4gk`@w6?wKN`(0HE!uK7SE|h4bJG?#aW7uQHLuJ-u3T7BHL~$l*B5lNrJk4OC zig+X;X#%23Od`rIN^;#^s?QH~HIeityUML8J9U}SuP4>6 zB=r;*hnHks|{(KXPRuva&_g(u8h@a+1l^n@kiUV^eye*f60Ct|%M1@MSWh zp}UcDWFVfgOO1>|DEFsr;>$FYQ8wEueBqu_dv98^ZKQM%!D$YyWZS=18VVyqDT#<| zEEDkx6Xq6IphQxTk%py37ECcLEgj)FLAW8!v_o$PI#eZGjap|LYbMhYiKE5qFt#5u zV@=~cVHB!7lCk|xjk1-aZ7vpwPcAehGgG@r9M7_4jlN* zXQ;eaXQqFOo_TAf724X;GEi7C-mP}v{CCJ)nPZ3dzgjZaeRB{Qm0@3Jfz&_ zT;^L@xnxec3@HzpZ*eX-`yrz&nNu!9%0nt0&gG6$RxX)SE;WVbqV%4JA-NUO_7YRS#z<=u z(ivq>YGb4|3+arqC$%xsT84B+*^}BBX^lfVqwGoL#;+U!k=2=vLn^N|xl-HY(i(?U zUYBG~Dt+^~T(YjKjwO}baL)8@mb^{K!ZLIE>qMKuRsnEUhmw!Rh0-A+bgfmJ{#xs? zzEG}Z$aTnUd&&dC?LNR)Wi>q4Xm|<`uqZ}rATukbP%eu`G&%(Yx~5kG7L8~vd1j3i z%4N}rMyH5IdL>}dh}Pv~)<~gT7L90hifE))0v3&EePd>g6v}1Mh(@P~MtUV+(TLWG zXVyreTo#RJbc$%CR{|D|XrqnH8Yz^^q7jWw5smapz@m{R_cqO}kwUqaA=e?zszosx zxgv_`mB97Mfq^+#%&MDBMKj*y$522u<0hN}G%RML4R5omW__Vt7JJd?6cFf|UI|z< z(&39unKe=<*D~Zfq|>q}Mk7~5F})Jlku>7u+$5`Zt|*@MmMl05C}>*}QUNMXE%E78 zPAwJ5>eLb^RzNs5PL`oI*)kMlbyC;nYFGD`eIgeg!{J>6vM~inTE0mS0(Vgf z_je7&l^TkCc`aq5P5bhfO>fyPWs^cMO~)Gx=ChQIMk$|uuk0bOrEIhbX#TS4ExV;` zQV6D&O~HJYve78zESnzkTFOS73g<7I-m+WDCWT;X*%ZuYDI1Ma&a&wtucd6XNqPRV z=`FjZY*GlOmQBHYma@?(X@>|?k&5e zCZ!NeE2NDD^I2+=Mk$|uuk0bOrEIi?to&uuTXsv?q!3Ikn}Yc)WusBbSvEc7wJd8V z*U)ko(0Ctc>`b=5KB{R&byY8!Eo-?+a`_7FnqCPwOOCJW6)m}*XgEvGO*KQw70c`_ zIZm!n$rUHC0{+JxIOU7*nd8F4{DfqX%#}tQ%vJW-j*@~S^kW>f@_c)C8SmiEDml74 zB3r`UNCeC~&rU`8Bayef5hj76#zkRfh{cKKuXuN^`7RmaF%d3OkJ@-Z}e$R9xZr3D3wt1X2Y3x^43ORmQie2Qk+$?aDqa{1KBlUjYRH*-)z4uB zFhgO+IK&9b#o9V8q4YR4O@j%mwW(TW?h^`ON0oJI$!O~hXItRR3w&IoyjqciMRV12 z7=slgWq}v9q#8Zewz^S^oj}k$x&xovMT7z)Rj!~YRJfnvh(<-fouG%9qE`<=tOG5C z6uq=ZZ;As$QIZQ2`4IggF5xi16D2#*5_{=L6=P|2rWi{RPD>o5^Rq-XI*J7^I>{Q5 zNPbl+`*nmukl#q^@rPs}3jM7NEU=|JKaT+JW^i-%g}g{X^2mS`?3Mfsltnk9l;)^| zeMIXHGIWmk=+&KKb)2F;Us>q3LhGj3M(RlfT#zv)*+;ipGHWJ6E!x2^a(Xsli9mpUq7QaJ9oGO}>o zDP(9piwt^@8NDxy5j*0|kb2Hds3$gd88Bw0Fb(-EO9GD9Q*o4)U|X%yS>vW_q$JfyTd@2jHEaGfvE#ZjJ`@crkBm8~)D#Pm zmW?<|+xMkASCovIZbxNdv9rHS|1ZBP%YcIAA`o$`6J3XakxYI%&oJmrfc9-srkNw`h)kVqV{c4eZ};x^7soE^<}aVk`nFh!wuCVKNO6`Cb&kcvr*Swf1G z(bMeFG-NynEriB;x5iR}WXKjQC5c?(u$Y|+Spm#3DjrKC#r$oNDx~?_ev_fZEjSVZ zD`b4e#1AJ&0Rc)Zk_GAeIPp4+PC+k@jb4!b)8pyUqb)Q9oUp^S!S*meaL>0Mbec2Q z@uKQS!<_j_xpgQJ9*Z-u!|r@sPIYBk1|n<8m}b0QEq!;?KmHgP&@O0C*3 zg*Moi5-@>CKyQad=`EKoAxjcfLDa_ND|Ts=9VyIQPsst z?HKKCTwS!cMcS-g$|{NqAsekwjBBNGTZ`pturar01u-cgLMz8~@+ekfYB$b^1x!*p zQoWK*U(lVwFs6%B$AXc<;q}DHaOnR|A@&}7N z1?sIZi)8uWoV~CW=$||~Jtj}|1HKd#qh(_lD~1WyRm911yN$Dm+ce67b5(u<$S0R6 z_0ZjF8Dwirmk;ADa}5^(0>=#2dc63$;qjOalRqbyAs-Djn)b+Itaw6#%YC#(IVE$d z35uO*Jb$NX&f7bkW)_8Q7+#kV5U0AE<|#9eu$yBcDNx4&M|rwi-l1z8(`9 z9adv@bfxAYnQX(wzP6!4-clhdW)51*@Lo1#`ZQTterz6DI4bm3rRAcf&^u^Zt8C7N zv9oQZ%xK6}TD$P$?dGgz63i0k()eV!^(_uSr Z8r?WDdiZo1@lPwAr4_f7T6L_%|37!F!bJc8 diff --git a/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.csproj.AssemblyReference.cache b/GenericRepository.Tests/obj/Debug/net8.0/GenericRepository.Tests.csproj.AssemblyReference.cache index 479529daaa116054e69d3af6457db510e2ae5870..6fd86f88cc6e89d3334372b2b746202063a682b3 100644 GIT binary patch delta 1928 zcmeycmFekCCT2FqsEy1#Qj8Ik4OJAP5{rvViW2jRGfVU>^o;ckbyHHyQgiYP^o$G* z%=B|Ill1daODyyZ^nHOULm(>kQgU(_85w}!-OEsu zKKt~!VIzNazuvcXd@6E@x@NW}+d9pTzk4NkT|GiJ!Yak{W~T!0HXjcD*w7<;xAFM@ z>PhopGMXUDZ4?()E&Te0ouzki$<5Vf?Owcf>JpkP#;>KAKVCVKYSE>>=C4M_E1fb; z#a27Xb)DBbkDXd`f8W-$Lp)2rf9`uHsT7o#7ND|HmYQj3Z+ z^Yd)M9-sU%S5?v?)gaX}%_z+<)y&j9EfM5J5MV3Btn?C-K*5$=0@Pkie85ds zv=rCeJh2uUW)euQ(Q`yHaqtA7G+F>gBRP5UK|4uiV3Gla96wsfO}^)*RgV;2MTtpC znI*Y}#D|q$5LkntG2P8P{M=sGxxN(N6r+Moqw0v?AKm0(Gm z=pj7GRco_>6q7Qe(d0lq@yUADa+5P`#kfx&S+L|9I7gaJPO#RPoNmjzd7o_*Gh_ec zi6*8JDVd4sdHKa9naRZ{X?Sv+y#^OT4wO*2PjGC78l?*~N(@J}@IcX6r(1xPJk6~NG$JlDdEH!U+KwV)`! zEHedI`b>UcVZ!SM6bXQf0BvQ?X?-)<+ENxx2584*A1g65QINS4Ow3p^fU!E+z*%&1 zvb_?!2Plg3(!tSaFliq&8Z{>yn2W;YK*s5siNX0GgE(DHH~TvNV1y?suE{H1L?-K5 zam}!8rskFC zo9S5q%Z-D5BBsz>9;oLGmO+^HFy(F7FK{a0M^nSdHhE&ISADO-o7Sv%I}VFlmH%3F zgD=l{>+Q)(UJ7Tb9=Cjp7t!l1=F|W1=jhdn-7oW3b`?%LUaa~4-jndz79s~K=0#a< zmHqbidUS%8@wwIa&r2@;x5MbOY*UC>&-Gp54EOgeX8ir*cB1zZ>4hyN_qgJHbOTRL z-D75U%<;tO=lQOM)qi$6%Wnl2E}hS>AN{whUm2Qk%==m6az)*(pt4;2<*jf|D5AjswpXZ{6Pf#%T)kWS>ye z%@YEDFoG4l4`iSGKA3m%I$tg}1+R}FMdyO|L*yQWvWx1a - - + + diff --git a/GenericRepository.Tests/obj/project.assets.json b/GenericRepository.Tests/obj/project.assets.json index 569bc2a..66a5972 100644 --- a/GenericRepository.Tests/obj/project.assets.json +++ b/GenericRepository.Tests/obj/project.assets.json @@ -215,6 +215,57 @@ } } }, + "MassTransit/8.3.1-develop.2106": { + "type": "package", + "dependencies": { + "MassTransit.Abstractions": "8.3.1-develop.2106", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "compile": { + "lib/net8.0/MassTransit.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MassTransit.dll": { + "related": ".xml" + } + } + }, + "MassTransit.Abstractions/8.3.1-develop.2106": { + "type": "package", + "compile": { + "lib/net8.0/MassTransit.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MassTransit.Abstractions.dll": { + "related": ".xml" + } + } + }, + "MassTransit.RabbitMQ/8.3.1-develop.2106": { + "type": "package", + "dependencies": { + "MassTransit": "8.3.1-develop.2106", + "RabbitMQ.Client": "6.8.1" + }, + "compile": { + "lib/net8.0/MassTransit.RabbitMqTransport.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MassTransit.RabbitMqTransport.dll": { + "related": ".xml" + } + } + }, "MedallionTopologicalSort/1.0.0": { "type": "package", "compile": { @@ -606,7 +657,7 @@ "buildTransitive/net6.0/_._": {} } }, - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { "type": "package", "compile": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { @@ -642,6 +693,100 @@ "buildTransitive/net6.0/_._": {} } }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, "Microsoft.Extensions.Logging/8.0.0": { "type": "package", "dependencies": { @@ -663,10 +808,10 @@ "buildTransitive/net6.0/_._": {} } }, - "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { "type": "package", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" }, "compile": { "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { @@ -682,7 +827,7 @@ "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {} } }, - "Microsoft.Extensions.Options/8.0.0": { + "Microsoft.Extensions.Options/8.0.2": { "type": "package", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", @@ -1464,6 +1609,23 @@ } } }, + "RabbitMQ.Client/6.8.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Threading.Channels": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/RabbitMQ.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/RabbitMQ.Client.dll": { + "related": ".xml" + } + } + }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "type": "package", "runtimeTargets": { @@ -2116,7 +2278,7 @@ "lib/netstandard1.6/System.Linq.Expressions.dll": {} } }, - "System.Memory/4.5.4": { + "System.Memory/4.5.5": { "type": "package", "compile": { "ref/netcoreapp2.1/_._": {} @@ -2854,6 +3016,22 @@ "lib/netstandard1.3/System.Threading.dll": {} } }, + "System.Threading.Channels/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, "System.Threading.Tasks/4.3.0": { "type": "package", "dependencies": { @@ -3049,9 +3227,12 @@ "dependencies": { "EFCore.BulkExtensions": "8.1.1", "EntityFramework.BulkExtensions": "1.0.0", + "MassTransit": "8.3.1-develop.2106", + "MassTransit.RabbitMQ": "8.3.1-develop.2106", "MediatR": "12.2.0", "Microsoft.EntityFrameworkCore": "8.0.8", "Microsoft.EntityFrameworkCore.Abstractions": "8.0.8", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.1", "Scrutor": "4.2.0" }, "compile": { @@ -3333,6 +3514,69 @@ "lib/net45/EntityFramework.MappingAPI.pdb" ] }, + "MassTransit/8.3.1-develop.2106": { + "sha512": "Nkx3mZVx0kzWFW5V+W2I/j8ECtX0Yqk3/unx3zkJU/IFDNYF2Sxb9nnoP6iy6/6w0fRSH4ZkuNIKIyHcyYdj9Q==", + "type": "package", + "path": "masstransit/8.3.1-develop.2106", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NuGet.README.md", + "lib/net472/MassTransit.dll", + "lib/net472/MassTransit.xml", + "lib/net6.0/MassTransit.dll", + "lib/net6.0/MassTransit.xml", + "lib/net8.0/MassTransit.dll", + "lib/net8.0/MassTransit.xml", + "lib/netstandard2.0/MassTransit.dll", + "lib/netstandard2.0/MassTransit.xml", + "masstransit.8.3.1-develop.2106.nupkg.sha512", + "masstransit.nuspec", + "mt-logo-small.png" + ] + }, + "MassTransit.Abstractions/8.3.1-develop.2106": { + "sha512": "sGJwQ8Sd2VVlQIN+6x768VENj2ahTbToppv3ybTTptok32fsnVKOU5WoQU17pi9eEQ6UhL7hTni+brIo6W/AJQ==", + "type": "package", + "path": "masstransit.abstractions/8.3.1-develop.2106", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NuGet.README.md", + "lib/net472/MassTransit.Abstractions.dll", + "lib/net472/MassTransit.Abstractions.xml", + "lib/net6.0/MassTransit.Abstractions.dll", + "lib/net6.0/MassTransit.Abstractions.xml", + "lib/net8.0/MassTransit.Abstractions.dll", + "lib/net8.0/MassTransit.Abstractions.xml", + "lib/netstandard2.0/MassTransit.Abstractions.dll", + "lib/netstandard2.0/MassTransit.Abstractions.xml", + "masstransit.abstractions.8.3.1-develop.2106.nupkg.sha512", + "masstransit.abstractions.nuspec", + "mt-logo-small.png" + ] + }, + "MassTransit.RabbitMQ/8.3.1-develop.2106": { + "sha512": "kGSpoKrWcdsrFPLEcDoI4SLdlUO1FAnffdth2zjtimKfVLN36wOAS9bExgVXf9ibIZvGYOBGgnSsgSnMtonldw==", + "type": "package", + "path": "masstransit.rabbitmq/8.3.1-develop.2106", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NuGet.README.md", + "lib/net472/MassTransit.RabbitMqTransport.dll", + "lib/net472/MassTransit.RabbitMqTransport.xml", + "lib/net6.0/MassTransit.RabbitMqTransport.dll", + "lib/net6.0/MassTransit.RabbitMqTransport.xml", + "lib/net8.0/MassTransit.RabbitMqTransport.dll", + "lib/net8.0/MassTransit.RabbitMqTransport.xml", + "lib/netstandard2.0/MassTransit.RabbitMqTransport.dll", + "lib/netstandard2.0/MassTransit.RabbitMqTransport.xml", + "masstransit.rabbitmq.8.3.1-develop.2106.nupkg.sha512", + "masstransit.rabbitmq.nuspec", + "mt-logo-small.png" + ] + }, "MedallionTopologicalSort/1.0.0": { "sha512": "dcAqM8TcyZQ/T466CvqNMUUn/G0FQE+4R7l62ngXH7hLFP9yA7yoP/ySsLgiXx3pGUQC3J+cUvXmJOOR/eC+oQ==", "type": "package", @@ -3906,10 +4150,10 @@ "useSharedDesignerContext.txt" ] }, - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { - "sha512": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "sha512": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", "type": "package", - "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -3933,7 +4177,7 @@ "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512", "microsoft.extensions.dependencyinjection.abstractions.nuspec", "useSharedDesignerContext.txt" ] @@ -3968,6 +4212,133 @@ "useSharedDesignerContext.txt" ] }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "sha512": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", + "type": "package", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512", + "microsoft.extensions.diagnostics.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": { + "sha512": "P9SoBuVZhJPpALZmSq72aQEb9ryP67EdquaCZGXGrrcASTNHYdrUhnpgSwIipgM5oVC+dKpRXg5zxobmF9xr5g==", + "type": "package", + "path": "microsoft.extensions.diagnostics.healthchecks/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.xml", + "microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.healthchecks.nuspec" + ] + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": { + "sha512": "AT2qqos3IgI09ok36Qag9T8bb6kHJ3uT9Q5ki6CySybFsK6/9JbvQAgAHf1pVEjST0/N4JaFaCbm40R5edffwg==", + "type": "package", + "path": "microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml", + "microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.healthchecks.abstractions.nuspec" + ] + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "sha512": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "type": "package", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Abstractions.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "sha512": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", + "type": "package", + "path": "microsoft.extensions.hosting.abstractions/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Hosting.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Hosting.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.xml", + "microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512", + "microsoft.extensions.hosting.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, "Microsoft.Extensions.Logging/8.0.0": { "sha512": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "type": "package", @@ -4000,10 +4371,10 @@ "useSharedDesignerContext.txt" ] }, - "Microsoft.Extensions.Logging.Abstractions/8.0.0": { - "sha512": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "sha512": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", "type": "package", - "path": "microsoft.extensions.logging.abstractions/8.0.0", + "path": "microsoft.extensions.logging.abstractions/8.0.2", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -4068,15 +4439,15 @@ "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", - "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512", "microsoft.extensions.logging.abstractions.nuspec", "useSharedDesignerContext.txt" ] }, - "Microsoft.Extensions.Options/8.0.0": { - "sha512": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "Microsoft.Extensions.Options/8.0.2": { + "sha512": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", "type": "package", - "path": "microsoft.extensions.options/8.0.0", + "path": "microsoft.extensions.options/8.0.2", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -4115,7 +4486,7 @@ "lib/netstandard2.0/Microsoft.Extensions.Options.xml", "lib/netstandard2.1/Microsoft.Extensions.Options.dll", "lib/netstandard2.1/Microsoft.Extensions.Options.xml", - "microsoft.extensions.options.8.0.0.nupkg.sha512", + "microsoft.extensions.options.8.0.2.nupkg.sha512", "microsoft.extensions.options.nuspec", "useSharedDesignerContext.txt" ] @@ -5156,6 +5527,23 @@ "pomelo.entityframeworkcore.mysql.nuspec" ] }, + "RabbitMQ.Client/6.8.1": { + "sha512": "jNsmGgmCNw2S/NzskeN2ijtGywtH4Sk/G6jWUTD5sY9SrC27Xz6BsLIiB8hdsfjeyWCa4j4GvCIGkpE8wrjU1Q==", + "type": "package", + "path": "rabbitmq.client/6.8.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net462/RabbitMQ.Client.dll", + "lib/net462/RabbitMQ.Client.xml", + "lib/netstandard2.0/RabbitMQ.Client.dll", + "lib/netstandard2.0/RabbitMQ.Client.xml", + "rabbitmq.client.6.8.1.nupkg.sha512", + "rabbitmq.client.nuspec" + ] + }, "runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl/4.3.0": { "sha512": "HdSSp5MnJSsg08KMfZThpuLPJpPwE5hBXvHwoKWosyHHfe8Mh5WKT0ylEOf6yNzX6Ngjxe4Whkafh5q7Ymac4Q==", "type": "package", @@ -6651,10 +7039,10 @@ "system.linq.expressions.nuspec" ] }, - "System.Memory/4.5.4": { - "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "System.Memory/4.5.5": { + "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", "type": "package", - "path": "system.memory/4.5.4", + "path": "system.memory/4.5.5", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -6668,7 +7056,7 @@ "lib/netstandard2.0/System.Memory.dll", "lib/netstandard2.0/System.Memory.xml", "ref/netcoreapp2.1/_._", - "system.memory.4.5.4.nupkg.sha512", + "system.memory.4.5.5.nupkg.sha512", "system.memory.nuspec", "useSharedDesignerContext.txt", "version.txt" @@ -8707,6 +9095,35 @@ "system.threading.nuspec" ] }, + "System.Threading.Channels/7.0.0": { + "sha512": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==", + "type": "package", + "path": "system.threading.channels/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.Channels.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.Channels.targets", + "lib/net462/System.Threading.Channels.dll", + "lib/net462/System.Threading.Channels.xml", + "lib/net6.0/System.Threading.Channels.dll", + "lib/net6.0/System.Threading.Channels.xml", + "lib/net7.0/System.Threading.Channels.dll", + "lib/net7.0/System.Threading.Channels.xml", + "lib/netstandard2.0/System.Threading.Channels.dll", + "lib/netstandard2.0/System.Threading.Channels.xml", + "lib/netstandard2.1/System.Threading.Channels.dll", + "lib/netstandard2.1/System.Threading.Channels.xml", + "system.threading.channels.7.0.0.nupkg.sha512", + "system.threading.channels.nuspec", + "useSharedDesignerContext.txt" + ] + }, "System.Threading.Tasks/4.3.0": { "sha512": "LbSxKEdOUhVe8BezB/9uOGGppt+nZf6e1VFyw6v3DN6lqitm0OSn2uXMOdtP0M3W4iMcqcivm2J6UgqiwwnXiA==", "type": "package", diff --git a/GenericRepository.Tests/obj/project.nuget.cache b/GenericRepository.Tests/obj/project.nuget.cache index 7d4f296..df2f923 100644 --- a/GenericRepository.Tests/obj/project.nuget.cache +++ b/GenericRepository.Tests/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "eTsTHzCmpvk=", + "dgSpecHash": "JOmx//wl5Vc=", "success": true, "projectFilePath": "/Users/macbook/Projects/Generic Repository/GenericRepository.Tests/GenericRepository.Tests.csproj", "expectedPackageFiles": [ @@ -17,6 +17,9 @@ "/Users/macbook/.nuget/packages/entityframework/6.1.3/entityframework.6.1.3.nupkg.sha512", "/Users/macbook/.nuget/packages/entityframework.bulkextensions/1.0.0/entityframework.bulkextensions.1.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/entityframework.mappingapi/6.1.0.9/entityframework.mappingapi.6.1.0.9.nupkg.sha512", + "/Users/macbook/.nuget/packages/masstransit/8.3.1-develop.2106/masstransit.8.3.1-develop.2106.nupkg.sha512", + "/Users/macbook/.nuget/packages/masstransit.abstractions/8.3.1-develop.2106/masstransit.abstractions.8.3.1-develop.2106.nupkg.sha512", + "/Users/macbook/.nuget/packages/masstransit.rabbitmq/8.3.1-develop.2106/masstransit.rabbitmq.8.3.1-develop.2106.nupkg.sha512", "/Users/macbook/.nuget/packages/medalliontopologicalsort/1.0.0/medalliontopologicalsort.1.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/mediatr/12.2.0/mediatr.12.2.0.nupkg.sha512", "/Users/macbook/.nuget/packages/mediatr.contracts/2.0.1/mediatr.contracts.2.0.1.nupkg.sha512", @@ -38,11 +41,16 @@ "/Users/macbook/.nuget/packages/microsoft.extensions.caching.memory/8.0.0/microsoft.extensions.caching.memory.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.configuration.abstractions/8.0.0/microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.dependencyinjection/8.0.0/microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/8.0.0/microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/8.0.2/microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.dependencymodel/8.0.1/microsoft.extensions.dependencymodel.8.0.1.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.diagnostics.abstractions/8.0.1/microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.diagnostics.healthchecks/8.0.0/microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0/microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.fileproviders.abstractions/8.0.0/microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.hosting.abstractions/8.0.1/microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.logging/8.0.0/microsoft.extensions.logging.8.0.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/microsoft.extensions.logging.abstractions/8.0.0/microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/microsoft.extensions.options/8.0.0/microsoft.extensions.options.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.logging.abstractions/8.0.2/microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.options/8.0.2/microsoft.extensions.options.8.0.2.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.primitives/8.0.0/microsoft.extensions.primitives.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.identity.client/4.61.3/microsoft.identity.client.4.61.3.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.identity.client.extensions.msal/4.61.3/microsoft.identity.client.extensions.msal.4.61.3.nupkg.sha512", @@ -72,6 +80,7 @@ "/Users/macbook/.nuget/packages/npgsql.entityframeworkcore.postgresql/8.0.4/npgsql.entityframeworkcore.postgresql.8.0.4.nupkg.sha512", "/Users/macbook/.nuget/packages/nuget.frameworks/5.11.0/nuget.frameworks.5.11.0.nupkg.sha512", "/Users/macbook/.nuget/packages/pomelo.entityframeworkcore.mysql/8.0.2/pomelo.entityframeworkcore.mysql.8.0.2.nupkg.sha512", + "/Users/macbook/.nuget/packages/rabbitmq.client/6.8.1/rabbitmq.client.6.8.1.nupkg.sha512", "/Users/macbook/.nuget/packages/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512", @@ -114,7 +123,7 @@ "/Users/macbook/.nuget/packages/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.linq/4.3.0/system.linq.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.linq.expressions/4.3.0/system.linq.expressions.4.3.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/system.memory/4.5.4/system.memory.4.5.4.nupkg.sha512", + "/Users/macbook/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512", "/Users/macbook/.nuget/packages/system.memory.data/1.0.2/system.memory.data.1.0.2.nupkg.sha512", "/Users/macbook/.nuget/packages/system.net.http/4.3.0/system.net.http.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg.sha512", @@ -153,6 +162,7 @@ "/Users/macbook/.nuget/packages/system.text.json/8.0.4/system.text.json.8.0.4.nupkg.sha512", "/Users/macbook/.nuget/packages/system.text.regularexpressions/4.3.0/system.text.regularexpressions.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.threading/4.3.0/system.threading.4.3.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/system.threading.channels/7.0.0/system.threading.channels.7.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg.sha512", "/Users/macbook/.nuget/packages/system.threading.timer/4.3.0/system.threading.timer.4.3.0.nupkg.sha512", diff --git a/GenericRepository.Tests/obj/rider.project.restore.info b/GenericRepository.Tests/obj/rider.project.restore.info index 228c935..a6475af 100644 --- a/GenericRepository.Tests/obj/rider.project.restore.info +++ b/GenericRepository.Tests/obj/rider.project.restore.info @@ -1 +1 @@ -17274215514174141 \ No newline at end of file +17309744100968706 \ No newline at end of file diff --git a/GenericRepository.sln.DotSettings.user b/GenericRepository.sln.DotSettings.user index 745bddb..a11fdaf 100644 --- a/GenericRepository.sln.DotSettings.user +++ b/GenericRepository.sln.DotSettings.user @@ -1,4 +1,5 @@  + ForceIncluded ForceIncluded <SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from &lt;GenericRepository.Tests&gt;" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Project Location="/Users/macbook/Projects/Generic Repository/GenericRepository.Tests" Presentation="&lt;GenericRepository.Tests&gt;" /> diff --git a/GenericRepository/Application/Interfaces/UnitOfWork/IUnitOfWork.cs b/GenericRepository/Application/Interfaces/UnitOfWork/IUnitOfWork.cs index 01cdf7f..11d8101 100644 --- a/GenericRepository/Application/Interfaces/UnitOfWork/IUnitOfWork.cs +++ b/GenericRepository/Application/Interfaces/UnitOfWork/IUnitOfWork.cs @@ -1,3 +1,5 @@ +using GenericRepository.Application.Interfaces.GenericRepository.Command; +using GenericRepository.Domain.Entities; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; @@ -6,6 +8,7 @@ namespace GenericRepository.Application.Interfaces.UnitOfWork; public interface IUnitOfWork where TContext : DbContext { + IRepository OutboxMessages { get; } Task SaveAsync(); int Save(); Task RollbackTransactionAsync(); diff --git a/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs b/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs index 8128a8c..a95c9ba 100644 --- a/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs +++ b/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs @@ -27,6 +27,7 @@ public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) public DateTime? ProcessedOnUtc { get; private set; } public string? Error { get; private set; } public OutBoxMessageEventType EventType { get; init; } + public bool IsProcessed => ProcessedOnUtc.HasValue; public void Process(string? error = null) { ProcessedOnUtc = DateTime.UtcNow; diff --git a/GenericRepository/GenericRepository.csproj b/GenericRepository/GenericRepository.csproj index 1defa55..6047095 100644 --- a/GenericRepository/GenericRepository.csproj +++ b/GenericRepository/GenericRepository.csproj @@ -9,9 +9,12 @@ + + + diff --git a/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs b/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs index 33c4b52..6ffa3a2 100644 --- a/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs +++ b/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs @@ -3,6 +3,7 @@ using GenericRepository.Application.Interfaces.UnitOfWork; using GenericRepository.Infrastructure.Context; using GenericRepository.Infrastructure.EfInterceptors; +using GenericRepository.Infrastructure.Jobs; using GenericRepository.Infrastructure.Repository.GenericRepository.Command; using GenericRepository.Infrastructure.Repository.GenericRepository.Query; using GenericRepository.Infrastructure.Repository.UnitOfWork; @@ -23,6 +24,7 @@ public static void InjectServices(IServiceCollection services) services.AddTransient(typeof(IRepository<>), typeof(Repository<>)); services.AddTransient(typeof(IQueryGenericRepository<>), typeof(QueryGenericRepository<>)); services.Decorate(typeof(IQueryGenericRepository<>), typeof(CacheRepository<>)); + services.AddHostedService(); } } } diff --git a/GenericRepository/Infrastructure/Jobs/OutboxProcessorJob.cs b/GenericRepository/Infrastructure/Jobs/OutboxProcessorJob.cs new file mode 100644 index 0000000..b21cff1 --- /dev/null +++ b/GenericRepository/Infrastructure/Jobs/OutboxProcessorJob.cs @@ -0,0 +1,70 @@ + +using System.Reflection; +using System.Text.Json; +using GenericRepository.Application.Interfaces.GenericRepository.Command; +using GenericRepository.Application.Interfaces.GenericRepository.Query; +using GenericRepository.Application.Interfaces.UnitOfWork; +using GenericRepository.Domain; +using GenericRepository.Domain.Entities; +using GenericRepository.Domain.Enums; +using GenericRepository.Infrastructure.Context; +using MediatR; +using Microsoft.Extensions.Hosting; +using MassTransit; +namespace GenericRepository.Infrastructure.Jobs; + +public class OutboxProcessorJob( + IQueryGenericRepository readRepository, + IUnitOfWork unitOfWork, + IMediator mediator, + IPublishEndpoint publisher) : BackgroundService +{ + protected override async Task ExecuteAsync(CancellationToken stoppingToken) + { + var messages = GetMessages(); + + foreach (var message in messages) + { + await PublishMessage(message); + + message.Process(); + + await Save(message); + } + } + + private IReadOnlyList GetMessages() + { + var messages = readRepository.GetList(query: m=> !m.ProcessedOnUtc.HasValue); + return messages; + } + + private async Task PublishMessage(OutBoxMessage message) + { + var @event = GetEvent(message); + + if (message.EventType.EventType is EventTypeEnum.Internal) + { + await mediator.Publish(@event); + } + else + { + await publisher.Publish(@event); + } + } + + private async Task Save(OutBoxMessage message) + { + await unitOfWork.OutboxMessages.UpdateAsync(message); + await unitOfWork.SaveAsync(); + } + + private static object? GetEvent(OutBoxMessage message) + { + var messageType = Type.GetType(message.EntityType); + var @event = JsonSerializer.Deserialize(message.Content, messageType); + return @event; + } + + +} \ No newline at end of file diff --git a/GenericRepository/Infrastructure/Repository/UnitOfWork/UnitOfWork.cs b/GenericRepository/Infrastructure/Repository/UnitOfWork/UnitOfWork.cs index f228502..9ea9372 100644 --- a/GenericRepository/Infrastructure/Repository/UnitOfWork/UnitOfWork.cs +++ b/GenericRepository/Infrastructure/Repository/UnitOfWork/UnitOfWork.cs @@ -1,18 +1,26 @@ +using GenericRepository.Application.Interfaces.GenericRepository.Command; using GenericRepository.Application.Interfaces.UnitOfWork; +using GenericRepository.Domain.Entities; +using GenericRepository.Infrastructure.Context; +using GenericRepository.Infrastructure.Repository.GenericRepository.Command; using Microsoft.Data.SqlClient; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Storage; namespace GenericRepository.Infrastructure.Repository.UnitOfWork; -public class UnitOfWork : IUnitOfWork where TContext : DbContext +public class UnitOfWork : IUnitOfWork where TContext : CommandContext { private readonly TContext _context; public UnitOfWork(TContext context) { _context = context; } - + + private IRepository _outboxMessages; + public IRepository OutboxMessages => + _outboxMessages ??= new Repository(_context); + public async Task SaveAsync() { return await _context.SaveChangesAsync(); diff --git a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs index 4e651ca..03e394d 100644 --- a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs +++ b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfo.cs @@ -13,7 +13,7 @@ [assembly: System.Reflection.AssemblyCompanyAttribute("GenericRepository")] [assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")] [assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")] -[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+606efc5e2ab09a234f46c22dab96e198890c2f32")] +[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0+07c180bb50cb7647ac794015441d08efaafeb78b")] [assembly: System.Reflection.AssemblyProductAttribute("GenericRepository")] [assembly: System.Reflection.AssemblyTitleAttribute("GenericRepository")] [assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")] diff --git a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache index f90eee0..8a00155 100644 --- a/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache +++ b/GenericRepository/obj/Debug/net8.0/GenericRepository.AssemblyInfoInputs.cache @@ -1 +1 @@ -517f60ee648c7247e2ae9451eb824580db26b8246d3fe63da63c98ae829a6dd2 +8a26f8757afe566cd0c8988fc2ac1284b2114ad6ce97843c6d7c08b7003fe540 diff --git a/GenericRepository/obj/Debug/net8.0/GenericRepository.assets.cache b/GenericRepository/obj/Debug/net8.0/GenericRepository.assets.cache index ecb69a432de9afad754c8f0560d15f5dae2ef11f..191ef69a2fc21719434febaea1fb4d3e5fda2424 100644 GIT binary patch literal 58903 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 delta 131 zcmZqs$2jp8BL^F!6$1kUqu1n(!t#^%GqP>ey(74}P+U%NvcHMaoS2Q=X=UAD|mgJTyG#ddA_H}Ofa$%2kL clb3i4vd!G~7Nmc-x1K7aGsvpVyNkSe02XC27XSbN diff --git a/GenericRepository/obj/GenericRepository.csproj.nuget.dgspec.json b/GenericRepository/obj/GenericRepository.csproj.nuget.dgspec.json index c75384d..79fbcbc 100644 --- a/GenericRepository/obj/GenericRepository.csproj.nuget.dgspec.json +++ b/GenericRepository/obj/GenericRepository.csproj.nuget.dgspec.json @@ -51,6 +51,14 @@ "target": "Package", "version": "[1.0.0, )" }, + "MassTransit": { + "target": "Package", + "version": "[8.3.1-develop.2106, )" + }, + "MassTransit.RabbitMQ": { + "target": "Package", + "version": "[8.3.1-develop.2106, )" + }, "MediatR": { "target": "Package", "version": "[12.2.0, )" @@ -63,6 +71,10 @@ "target": "Package", "version": "[8.0.8, )" }, + "Microsoft.Extensions.Hosting.Abstractions": { + "target": "Package", + "version": "[8.0.1, )" + }, "Scrutor": { "target": "Package", "version": "[4.2.0, )" diff --git a/GenericRepository/obj/GenericRepository.csproj.nuget.g.targets b/GenericRepository/obj/GenericRepository.csproj.nuget.g.targets index ee6509e..0c7b32f 100644 --- a/GenericRepository/obj/GenericRepository.csproj.nuget.g.targets +++ b/GenericRepository/obj/GenericRepository.csproj.nuget.g.targets @@ -2,7 +2,7 @@ - - + + \ No newline at end of file diff --git a/GenericRepository/obj/project.assets.json b/GenericRepository/obj/project.assets.json index 47e3bd0..715f615 100644 --- a/GenericRepository/obj/project.assets.json +++ b/GenericRepository/obj/project.assets.json @@ -193,6 +193,57 @@ } } }, + "MassTransit/8.3.1-develop.2106": { + "type": "package", + "dependencies": { + "MassTransit.Abstractions": "8.3.1-develop.2106", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", + "Microsoft.Extensions.Diagnostics.HealthChecks": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "compile": { + "lib/net8.0/MassTransit.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MassTransit.dll": { + "related": ".xml" + } + } + }, + "MassTransit.Abstractions/8.3.1-develop.2106": { + "type": "package", + "compile": { + "lib/net8.0/MassTransit.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MassTransit.Abstractions.dll": { + "related": ".xml" + } + } + }, + "MassTransit.RabbitMQ/8.3.1-develop.2106": { + "type": "package", + "dependencies": { + "MassTransit": "8.3.1-develop.2106", + "RabbitMQ.Client": "6.8.1" + }, + "compile": { + "lib/net8.0/MassTransit.RabbitMqTransport.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/MassTransit.RabbitMqTransport.dll": { + "related": ".xml" + } + } + }, "MedallionTopologicalSort/1.0.0": { "type": "package", "compile": { @@ -571,7 +622,7 @@ "buildTransitive/net6.0/_._": {} } }, - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { "type": "package", "compile": { "lib/net8.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": { @@ -607,6 +658,100 @@ "buildTransitive/net6.0/_._": {} } }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Options": "8.0.2" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions": "8.0.0", + "Microsoft.Extensions.Hosting.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.0", + "Microsoft.Extensions.Options": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": { + "type": "package", + "compile": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll": { + "related": ".xml" + } + } + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Primitives": "8.0.0" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "type": "package", + "dependencies": { + "Microsoft.Extensions.Configuration.Abstractions": "8.0.0", + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2", + "Microsoft.Extensions.Diagnostics.Abstractions": "8.0.1", + "Microsoft.Extensions.FileProviders.Abstractions": "8.0.0", + "Microsoft.Extensions.Logging.Abstractions": "8.0.2" + }, + "compile": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, "Microsoft.Extensions.Logging/8.0.0": { "type": "package", "dependencies": { @@ -628,10 +773,10 @@ "buildTransitive/net6.0/_._": {} } }, - "Microsoft.Extensions.Logging.Abstractions/8.0.0": { + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { "type": "package", "dependencies": { - "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0" + "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.2" }, "compile": { "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.dll": { @@ -647,7 +792,7 @@ "buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets": {} } }, - "Microsoft.Extensions.Options/8.0.0": { + "Microsoft.Extensions.Options/8.0.2": { "type": "package", "dependencies": { "Microsoft.Extensions.DependencyInjection.Abstractions": "8.0.0", @@ -1018,6 +1163,23 @@ } } }, + "RabbitMQ.Client/6.8.1": { + "type": "package", + "dependencies": { + "System.Memory": "4.5.5", + "System.Threading.Channels": "7.0.0" + }, + "compile": { + "lib/netstandard2.0/RabbitMQ.Client.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/netstandard2.0/RabbitMQ.Client.dll": { + "related": ".xml" + } + } + }, "Scrutor/4.2.0": { "type": "package", "dependencies": { @@ -1146,7 +1308,7 @@ } } }, - "System.Memory/4.5.4": { + "System.Memory/4.5.5": { "type": "package", "compile": { "ref/netcoreapp2.1/_._": {} @@ -1321,6 +1483,22 @@ "buildTransitive/net6.0/System.Text.Json.targets": {} } }, + "System.Threading.Channels/7.0.0": { + "type": "package", + "compile": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "runtime": { + "lib/net7.0/System.Threading.Channels.dll": { + "related": ".xml" + } + }, + "build": { + "buildTransitive/net6.0/_._": {} + } + }, "System.Threading.Tasks.Extensions/4.5.4": { "type": "package", "compile": { @@ -1527,6 +1705,69 @@ "lib/net45/EntityFramework.MappingAPI.pdb" ] }, + "MassTransit/8.3.1-develop.2106": { + "sha512": "Nkx3mZVx0kzWFW5V+W2I/j8ECtX0Yqk3/unx3zkJU/IFDNYF2Sxb9nnoP6iy6/6w0fRSH4ZkuNIKIyHcyYdj9Q==", + "type": "package", + "path": "masstransit/8.3.1-develop.2106", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NuGet.README.md", + "lib/net472/MassTransit.dll", + "lib/net472/MassTransit.xml", + "lib/net6.0/MassTransit.dll", + "lib/net6.0/MassTransit.xml", + "lib/net8.0/MassTransit.dll", + "lib/net8.0/MassTransit.xml", + "lib/netstandard2.0/MassTransit.dll", + "lib/netstandard2.0/MassTransit.xml", + "masstransit.8.3.1-develop.2106.nupkg.sha512", + "masstransit.nuspec", + "mt-logo-small.png" + ] + }, + "MassTransit.Abstractions/8.3.1-develop.2106": { + "sha512": "sGJwQ8Sd2VVlQIN+6x768VENj2ahTbToppv3ybTTptok32fsnVKOU5WoQU17pi9eEQ6UhL7hTni+brIo6W/AJQ==", + "type": "package", + "path": "masstransit.abstractions/8.3.1-develop.2106", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NuGet.README.md", + "lib/net472/MassTransit.Abstractions.dll", + "lib/net472/MassTransit.Abstractions.xml", + "lib/net6.0/MassTransit.Abstractions.dll", + "lib/net6.0/MassTransit.Abstractions.xml", + "lib/net8.0/MassTransit.Abstractions.dll", + "lib/net8.0/MassTransit.Abstractions.xml", + "lib/netstandard2.0/MassTransit.Abstractions.dll", + "lib/netstandard2.0/MassTransit.Abstractions.xml", + "masstransit.abstractions.8.3.1-develop.2106.nupkg.sha512", + "masstransit.abstractions.nuspec", + "mt-logo-small.png" + ] + }, + "MassTransit.RabbitMQ/8.3.1-develop.2106": { + "sha512": "kGSpoKrWcdsrFPLEcDoI4SLdlUO1FAnffdth2zjtimKfVLN36wOAS9bExgVXf9ibIZvGYOBGgnSsgSnMtonldw==", + "type": "package", + "path": "masstransit.rabbitmq/8.3.1-develop.2106", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "NuGet.README.md", + "lib/net472/MassTransit.RabbitMqTransport.dll", + "lib/net472/MassTransit.RabbitMqTransport.xml", + "lib/net6.0/MassTransit.RabbitMqTransport.dll", + "lib/net6.0/MassTransit.RabbitMqTransport.xml", + "lib/net8.0/MassTransit.RabbitMqTransport.dll", + "lib/net8.0/MassTransit.RabbitMqTransport.xml", + "lib/netstandard2.0/MassTransit.RabbitMqTransport.dll", + "lib/netstandard2.0/MassTransit.RabbitMqTransport.xml", + "masstransit.rabbitmq.8.3.1-develop.2106.nupkg.sha512", + "masstransit.rabbitmq.nuspec", + "mt-logo-small.png" + ] + }, "MedallionTopologicalSort/1.0.0": { "sha512": "dcAqM8TcyZQ/T466CvqNMUUn/G0FQE+4R7l62ngXH7hLFP9yA7yoP/ySsLgiXx3pGUQC3J+cUvXmJOOR/eC+oQ==", "type": "package", @@ -2036,10 +2277,10 @@ "useSharedDesignerContext.txt" ] }, - "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.0": { - "sha512": "cjWrLkJXK0rs4zofsK4bSdg+jhDLTaxrkXu4gS6Y7MAlCvRyNNgwY/lJi5RDlQOnSZweHqoyvgvbdvQsRIW+hg==", + "Microsoft.Extensions.DependencyInjection.Abstractions/8.0.2": { + "sha512": "3iE7UF7MQkCv1cxzCahz+Y/guQbTqieyxyaWKhrRO91itI9cOKO76OHeQDahqG4MmW5umr3CcCvGmK92lWNlbg==", "type": "package", - "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.0", + "path": "microsoft.extensions.dependencyinjection.abstractions/8.0.2", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -2063,7 +2304,7 @@ "lib/netstandard2.0/Microsoft.Extensions.DependencyInjection.Abstractions.xml", "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.dll", "lib/netstandard2.1/Microsoft.Extensions.DependencyInjection.Abstractions.xml", - "microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512", "microsoft.extensions.dependencyinjection.abstractions.nuspec", "useSharedDesignerContext.txt" ] @@ -2098,6 +2339,133 @@ "useSharedDesignerContext.txt" ] }, + "Microsoft.Extensions.Diagnostics.Abstractions/8.0.1": { + "sha512": "elH2vmwNmsXuKmUeMQ4YW9ldXiF+gSGDgg1vORksob5POnpaI6caj1Hu8zaYbEuibhqCoWg0YRWDazBY3zjBfg==", + "type": "package", + "path": "microsoft.extensions.diagnostics.abstractions/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Diagnostics.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.Abstractions.xml", + "microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512", + "microsoft.extensions.diagnostics.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Diagnostics.HealthChecks/8.0.0": { + "sha512": "P9SoBuVZhJPpALZmSq72aQEb9ryP67EdquaCZGXGrrcASTNHYdrUhnpgSwIipgM5oVC+dKpRXg5zxobmF9xr5g==", + "type": "package", + "path": "microsoft.extensions.diagnostics.healthchecks/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.xml", + "microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.healthchecks.nuspec" + ] + }, + "Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions/8.0.0": { + "sha512": "AT2qqos3IgI09ok36Qag9T8bb6kHJ3uT9Q5ki6CySybFsK6/9JbvQAgAHf1pVEjST0/N4JaFaCbm40R5edffwg==", + "type": "package", + "path": "microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "THIRD-PARTY-NOTICES.TXT", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Diagnostics.HealthChecks.Abstractions.xml", + "microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.diagnostics.healthchecks.abstractions.nuspec" + ] + }, + "Microsoft.Extensions.FileProviders.Abstractions/8.0.0": { + "sha512": "ZbaMlhJlpisjuWbvXr4LdAst/1XxH3vZ6A0BsgTphZ2L4PGuxRLz7Jr/S7mkAAnOn78Vu0fKhEgNF5JO3zfjqQ==", + "type": "package", + "path": "microsoft.extensions.fileproviders.abstractions/8.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.FileProviders.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.FileProviders.Abstractions.targets", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net462/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.FileProviders.Abstractions.xml", + "microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.fileproviders.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, + "Microsoft.Extensions.Hosting.Abstractions/8.0.1": { + "sha512": "nHwq9aPBdBPYXPti6wYEEfgXddfBrYC+CQLn+qISiwQq5tpfaqDZSKOJNxoe9rfQxGf1c+2wC/qWFe1QYJPYqw==", + "type": "package", + "path": "microsoft.extensions.hosting.abstractions/8.0.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "PACKAGE.md", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/Microsoft.Extensions.Hosting.Abstractions.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/Microsoft.Extensions.Hosting.Abstractions.targets", + "lib/net462/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net462/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net6.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net6.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net7.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/net8.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/netstandard2.0/Microsoft.Extensions.Hosting.Abstractions.xml", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.dll", + "lib/netstandard2.1/Microsoft.Extensions.Hosting.Abstractions.xml", + "microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512", + "microsoft.extensions.hosting.abstractions.nuspec", + "useSharedDesignerContext.txt" + ] + }, "Microsoft.Extensions.Logging/8.0.0": { "sha512": "tvRkov9tAJ3xP51LCv3FJ2zINmv1P8Hi8lhhtcKGqM+ImiTCC84uOPEI4z8Cdq2C3o9e+Aa0Gw0rmrsJD77W+w==", "type": "package", @@ -2130,10 +2498,10 @@ "useSharedDesignerContext.txt" ] }, - "Microsoft.Extensions.Logging.Abstractions/8.0.0": { - "sha512": "arDBqTgFCyS0EvRV7O3MZturChstm50OJ0y9bDJvAcmEPJm0FFpFyjU/JLYyStNGGey081DvnQYlncNX5SJJGA==", + "Microsoft.Extensions.Logging.Abstractions/8.0.2": { + "sha512": "nroMDjS7hNBPtkZqVBbSiQaQjWRDxITI8Y7XnDs97rqG3EbzVTNLZQf7bIeUJcaHOV8bca47s1Uxq94+2oGdxA==", "type": "package", - "path": "microsoft.extensions.logging.abstractions/8.0.0", + "path": "microsoft.extensions.logging.abstractions/8.0.2", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -2198,15 +2566,15 @@ "lib/net8.0/Microsoft.Extensions.Logging.Abstractions.xml", "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.dll", "lib/netstandard2.0/Microsoft.Extensions.Logging.Abstractions.xml", - "microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512", + "microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512", "microsoft.extensions.logging.abstractions.nuspec", "useSharedDesignerContext.txt" ] }, - "Microsoft.Extensions.Options/8.0.0": { - "sha512": "JOVOfqpnqlVLUzINQ2fox8evY2SKLYJ3BV8QDe/Jyp21u1T7r45x/R/5QdteURMR5r01GxeJSBBUOCOyaNXA3g==", + "Microsoft.Extensions.Options/8.0.2": { + "sha512": "dWGKvhFybsaZpGmzkGCbNNwBD1rVlWzrZKANLW/CcbFJpCEceMCGzT7zZwHOGBCbwM0SzBuceMj5HN1LKV1QqA==", "type": "package", - "path": "microsoft.extensions.options/8.0.0", + "path": "microsoft.extensions.options/8.0.2", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -2245,7 +2613,7 @@ "lib/netstandard2.0/Microsoft.Extensions.Options.xml", "lib/netstandard2.1/Microsoft.Extensions.Options.dll", "lib/netstandard2.1/Microsoft.Extensions.Options.xml", - "microsoft.extensions.options.8.0.0.nupkg.sha512", + "microsoft.extensions.options.8.0.2.nupkg.sha512", "microsoft.extensions.options.nuspec", "useSharedDesignerContext.txt" ] @@ -2663,6 +3031,23 @@ "pomelo.entityframeworkcore.mysql.nuspec" ] }, + "RabbitMQ.Client/6.8.1": { + "sha512": "jNsmGgmCNw2S/NzskeN2ijtGywtH4Sk/G6jWUTD5sY9SrC27Xz6BsLIiB8hdsfjeyWCa4j4GvCIGkpE8wrjU1Q==", + "type": "package", + "path": "rabbitmq.client/6.8.1", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "README.md", + "icon.png", + "lib/net462/RabbitMQ.Client.dll", + "lib/net462/RabbitMQ.Client.xml", + "lib/netstandard2.0/RabbitMQ.Client.dll", + "lib/netstandard2.0/RabbitMQ.Client.xml", + "rabbitmq.client.6.8.1.nupkg.sha512", + "rabbitmq.client.nuspec" + ] + }, "Scrutor/4.2.0": { "sha512": "3A4HE/jetg7hySwrAPJY1G0mc6qo1StlF4y5JuIZOp17ULp0STnFWhIjBL+Qa/2z60y+SQ3xz3qMd9cSGS0qMg==", "type": "package", @@ -2833,10 +3218,10 @@ "system.identitymodel.tokens.jwt.nuspec" ] }, - "System.Memory/4.5.4": { - "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==", + "System.Memory/4.5.5": { + "sha512": "XIWiDvKPXaTveaB7HVganDlOCRoj03l+jrwNvcge/t8vhGYKvqV+dMv6G4SAX2NoNmN0wZfVPTAlFwZcZvVOUw==", "type": "package", - "path": "system.memory/4.5.4", + "path": "system.memory/4.5.5", "files": [ ".nupkg.metadata", ".signature.p7s", @@ -2850,7 +3235,7 @@ "lib/netstandard2.0/System.Memory.dll", "lib/netstandard2.0/System.Memory.xml", "ref/netcoreapp2.1/_._", - "system.memory.4.5.4.nupkg.sha512", + "system.memory.4.5.5.nupkg.sha512", "system.memory.nuspec", "useSharedDesignerContext.txt", "version.txt" @@ -3352,6 +3737,35 @@ "useSharedDesignerContext.txt" ] }, + "System.Threading.Channels/7.0.0": { + "sha512": "qmeeYNROMsONF6ndEZcIQ+VxR4Q/TX/7uIVLJqtwIWL7dDWeh0l1UIqgo4wYyjG//5lUNhwkLDSFl+pAWO6oiA==", + "type": "package", + "path": "system.threading.channels/7.0.0", + "files": [ + ".nupkg.metadata", + ".signature.p7s", + "Icon.png", + "LICENSE.TXT", + "THIRD-PARTY-NOTICES.TXT", + "buildTransitive/net461/System.Threading.Channels.targets", + "buildTransitive/net462/_._", + "buildTransitive/net6.0/_._", + "buildTransitive/netcoreapp2.0/System.Threading.Channels.targets", + "lib/net462/System.Threading.Channels.dll", + "lib/net462/System.Threading.Channels.xml", + "lib/net6.0/System.Threading.Channels.dll", + "lib/net6.0/System.Threading.Channels.xml", + "lib/net7.0/System.Threading.Channels.dll", + "lib/net7.0/System.Threading.Channels.xml", + "lib/netstandard2.0/System.Threading.Channels.dll", + "lib/netstandard2.0/System.Threading.Channels.xml", + "lib/netstandard2.1/System.Threading.Channels.dll", + "lib/netstandard2.1/System.Threading.Channels.xml", + "system.threading.channels.7.0.0.nupkg.sha512", + "system.threading.channels.nuspec", + "useSharedDesignerContext.txt" + ] + }, "System.Threading.Tasks.Extensions/4.5.4": { "sha512": "zteT+G8xuGu6mS+mzDzYXbzS7rd3K6Fjb9RiZlYlJPam2/hU7JCBZBVEcywNuR+oZ1ncTvc/cq0faRr3P01OVg==", "type": "package", @@ -3394,9 +3808,12 @@ "net8.0": [ "EFCore.BulkExtensions >= 8.1.1", "EntityFramework.BulkExtensions >= 1.0.0", + "MassTransit >= 8.3.1-develop.2106", + "MassTransit.RabbitMQ >= 8.3.1-develop.2106", "MediatR >= 12.2.0", "Microsoft.EntityFrameworkCore >= 8.0.8", "Microsoft.EntityFrameworkCore.Abstractions >= 8.0.8", + "Microsoft.Extensions.Hosting.Abstractions >= 8.0.1", "Scrutor >= 4.2.0" ] }, @@ -3450,6 +3867,14 @@ "target": "Package", "version": "[1.0.0, )" }, + "MassTransit": { + "target": "Package", + "version": "[8.3.1-develop.2106, )" + }, + "MassTransit.RabbitMQ": { + "target": "Package", + "version": "[8.3.1-develop.2106, )" + }, "MediatR": { "target": "Package", "version": "[12.2.0, )" @@ -3462,6 +3887,10 @@ "target": "Package", "version": "[8.0.8, )" }, + "Microsoft.Extensions.Hosting.Abstractions": { + "target": "Package", + "version": "[8.0.1, )" + }, "Scrutor": { "target": "Package", "version": "[4.2.0, )" diff --git a/GenericRepository/obj/project.nuget.cache b/GenericRepository/obj/project.nuget.cache index 3360d27..87e7491 100644 --- a/GenericRepository/obj/project.nuget.cache +++ b/GenericRepository/obj/project.nuget.cache @@ -1,6 +1,6 @@ { "version": 2, - "dgSpecHash": "RDSnOjB9qKI=", + "dgSpecHash": "yUFvpRLqzpo=", "success": true, "projectFilePath": "/Users/macbook/Projects/Generic Repository/GenericRepository/GenericRepository.csproj", "expectedPackageFiles": [ @@ -15,6 +15,9 @@ "/Users/macbook/.nuget/packages/entityframework/6.1.3/entityframework.6.1.3.nupkg.sha512", "/Users/macbook/.nuget/packages/entityframework.bulkextensions/1.0.0/entityframework.bulkextensions.1.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/entityframework.mappingapi/6.1.0.9/entityframework.mappingapi.6.1.0.9.nupkg.sha512", + "/Users/macbook/.nuget/packages/masstransit/8.3.1-develop.2106/masstransit.8.3.1-develop.2106.nupkg.sha512", + "/Users/macbook/.nuget/packages/masstransit.abstractions/8.3.1-develop.2106/masstransit.abstractions.8.3.1-develop.2106.nupkg.sha512", + "/Users/macbook/.nuget/packages/masstransit.rabbitmq/8.3.1-develop.2106/masstransit.rabbitmq.8.3.1-develop.2106.nupkg.sha512", "/Users/macbook/.nuget/packages/medalliontopologicalsort/1.0.0/medalliontopologicalsort.1.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/mediatr/12.2.0/mediatr.12.2.0.nupkg.sha512", "/Users/macbook/.nuget/packages/mediatr.contracts/2.0.1/mediatr.contracts.2.0.1.nupkg.sha512", @@ -35,11 +38,16 @@ "/Users/macbook/.nuget/packages/microsoft.extensions.caching.memory/8.0.0/microsoft.extensions.caching.memory.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.configuration.abstractions/8.0.0/microsoft.extensions.configuration.abstractions.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.dependencyinjection/8.0.0/microsoft.extensions.dependencyinjection.8.0.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/8.0.0/microsoft.extensions.dependencyinjection.abstractions.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/8.0.2/microsoft.extensions.dependencyinjection.abstractions.8.0.2.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.dependencymodel/8.0.1/microsoft.extensions.dependencymodel.8.0.1.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.diagnostics.abstractions/8.0.1/microsoft.extensions.diagnostics.abstractions.8.0.1.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.diagnostics.healthchecks/8.0.0/microsoft.extensions.diagnostics.healthchecks.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.diagnostics.healthchecks.abstractions/8.0.0/microsoft.extensions.diagnostics.healthchecks.abstractions.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.fileproviders.abstractions/8.0.0/microsoft.extensions.fileproviders.abstractions.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.hosting.abstractions/8.0.1/microsoft.extensions.hosting.abstractions.8.0.1.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.logging/8.0.0/microsoft.extensions.logging.8.0.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/microsoft.extensions.logging.abstractions/8.0.0/microsoft.extensions.logging.abstractions.8.0.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/microsoft.extensions.options/8.0.0/microsoft.extensions.options.8.0.0.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.logging.abstractions/8.0.2/microsoft.extensions.logging.abstractions.8.0.2.nupkg.sha512", + "/Users/macbook/.nuget/packages/microsoft.extensions.options/8.0.2/microsoft.extensions.options.8.0.2.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.extensions.primitives/8.0.0/microsoft.extensions.primitives.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.identity.client/4.61.3/microsoft.identity.client.4.61.3.nupkg.sha512", "/Users/macbook/.nuget/packages/microsoft.identity.client.extensions.msal/4.61.3/microsoft.identity.client.extensions.msal.4.61.3.nupkg.sha512", @@ -60,6 +68,7 @@ "/Users/macbook/.nuget/packages/npgsql/8.0.3/npgsql.8.0.3.nupkg.sha512", "/Users/macbook/.nuget/packages/npgsql.entityframeworkcore.postgresql/8.0.4/npgsql.entityframeworkcore.postgresql.8.0.4.nupkg.sha512", "/Users/macbook/.nuget/packages/pomelo.entityframeworkcore.mysql/8.0.2/pomelo.entityframeworkcore.mysql.8.0.2.nupkg.sha512", + "/Users/macbook/.nuget/packages/rabbitmq.client/6.8.1/rabbitmq.client.6.8.1.nupkg.sha512", "/Users/macbook/.nuget/packages/scrutor/4.2.0/scrutor.4.2.0.nupkg.sha512", "/Users/macbook/.nuget/packages/sqlitepclraw.core/2.1.6/sqlitepclraw.core.2.1.6.nupkg.sha512", "/Users/macbook/.nuget/packages/system.clientmodel/1.0.0/system.clientmodel.1.0.0.nupkg.sha512", @@ -67,7 +76,7 @@ "/Users/macbook/.nuget/packages/system.diagnostics.diagnosticsource/6.0.1/system.diagnostics.diagnosticsource.6.0.1.nupkg.sha512", "/Users/macbook/.nuget/packages/system.diagnostics.eventlog/8.0.0/system.diagnostics.eventlog.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.identitymodel.tokens.jwt/6.35.0/system.identitymodel.tokens.jwt.6.35.0.nupkg.sha512", - "/Users/macbook/.nuget/packages/system.memory/4.5.4/system.memory.4.5.4.nupkg.sha512", + "/Users/macbook/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512", "/Users/macbook/.nuget/packages/system.memory.data/1.0.2/system.memory.data.1.0.2.nupkg.sha512", "/Users/macbook/.nuget/packages/system.numerics.vectors/4.5.0/system.numerics.vectors.4.5.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.runtime/4.3.0/system.runtime.4.3.0.nupkg.sha512", @@ -78,6 +87,7 @@ "/Users/macbook/.nuget/packages/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.text.encodings.web/8.0.0/system.text.encodings.web.8.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.text.json/8.0.4/system.text.json.8.0.4.nupkg.sha512", + "/Users/macbook/.nuget/packages/system.threading.channels/7.0.0/system.threading.channels.7.0.0.nupkg.sha512", "/Users/macbook/.nuget/packages/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg.sha512" ], "logs": [ diff --git a/GenericRepository/obj/project.packagespec.json b/GenericRepository/obj/project.packagespec.json index 9f92f74..22ef2bf 100644 --- a/GenericRepository/obj/project.packagespec.json +++ b/GenericRepository/obj/project.packagespec.json @@ -1 +1 @@ -"restore":{"projectUniqueName":"/Users/macbook/Projects/Generic Repository/GenericRepository/GenericRepository.csproj","projectName":"GenericRepository","projectPath":"/Users/macbook/Projects/Generic Repository/GenericRepository/GenericRepository.csproj","outputPath":"/Users/macbook/Projects/Generic Repository/GenericRepository/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"EFCore.BulkExtensions":{"target":"Package","version":"[8.1.1, )"},"EntityFramework.BulkExtensions":{"target":"Package","version":"[1.0.0, )"},"MediatR":{"target":"Package","version":"[12.2.0, )"},"Microsoft.EntityFrameworkCore":{"target":"Package","version":"[8.0.8, )"},"Microsoft.EntityFrameworkCore.Abstractions":{"target":"Package","version":"[8.0.8, )"},"Scrutor":{"target":"Package","version":"[4.2.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/x64/sdk/8.0.201/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file +"restore":{"projectUniqueName":"/Users/macbook/Projects/Generic Repository/GenericRepository/GenericRepository.csproj","projectName":"GenericRepository","projectPath":"/Users/macbook/Projects/Generic Repository/GenericRepository/GenericRepository.csproj","outputPath":"/Users/macbook/Projects/Generic Repository/GenericRepository/obj/","projectStyle":"PackageReference","originalTargetFrameworks":["net8.0"],"sources":{"https://api.nuget.org/v3/index.json":{}},"frameworks":{"net8.0":{"targetAlias":"net8.0","projectReferences":{}}},"warningProperties":{"warnAsError":["NU1605"]},"restoreAuditProperties":{"enableAudit":"true","auditLevel":"low","auditMode":"direct"}}"frameworks":{"net8.0":{"targetAlias":"net8.0","dependencies":{"EFCore.BulkExtensions":{"target":"Package","version":"[8.1.1, )"},"EntityFramework.BulkExtensions":{"target":"Package","version":"[1.0.0, )"},"MassTransit":{"target":"Package","version":"[8.3.1-develop.2106, )"},"MassTransit.RabbitMQ":{"target":"Package","version":"[8.3.1-develop.2106, )"},"MediatR":{"target":"Package","version":"[12.2.0, )"},"Microsoft.EntityFrameworkCore":{"target":"Package","version":"[8.0.8, )"},"Microsoft.EntityFrameworkCore.Abstractions":{"target":"Package","version":"[8.0.8, )"},"Microsoft.Extensions.Hosting.Abstractions":{"target":"Package","version":"[8.0.1, )"},"Scrutor":{"target":"Package","version":"[4.2.0, )"}},"imports":["net461","net462","net47","net471","net472","net48","net481"],"assetTargetFallback":true,"warn":true,"frameworkReferences":{"Microsoft.NETCore.App":{"privateAssets":"all"}},"runtimeIdentifierGraphPath":"/usr/local/share/dotnet/x64/sdk/8.0.201/PortableRuntimeIdentifierGraph.json"}} \ No newline at end of file diff --git a/GenericRepository/obj/rider.project.model.nuget.info b/GenericRepository/obj/rider.project.model.nuget.info index 87d45e0..b9f3b80 100644 --- a/GenericRepository/obj/rider.project.model.nuget.info +++ b/GenericRepository/obj/rider.project.model.nuget.info @@ -1 +1 @@ -17274215513573840 \ No newline at end of file +17309739170706476 \ No newline at end of file diff --git a/GenericRepository/obj/rider.project.restore.info b/GenericRepository/obj/rider.project.restore.info index 87d45e0..ae43fc3 100644 --- a/GenericRepository/obj/rider.project.restore.info +++ b/GenericRepository/obj/rider.project.restore.info @@ -1 +1 @@ -17274215513573840 \ No newline at end of file +17309744100869388 \ No newline at end of file From 80f421a0826ed8aec1ba3e61dac95ac9040b15b3 Mon Sep 17 00:00:00 2001 From: Nikoo Asadnejad Date: Thu, 7 Nov 2024 14:31:10 +0330 Subject: [PATCH 6/6] feat: add outboxMessage interceptor --- .../OutBoxMessage/Entities/OutBoxMessage.cs | 2 +- .../AddOutboxMessageInterceptor.cs | 67 +++++++++++++++++++ .../PublishDomainEventsInterceptor.cs | 1 - .../OutBoxMessageConfiguration.cs | 2 + .../Ioc/GenericRepositoryConfigurator.cs | 1 + 5 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 GenericRepository/Infrastructure/EfInterceptors/AddOutboxMessageInterceptor.cs diff --git a/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs b/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs index a95c9ba..cacf4a2 100644 --- a/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs +++ b/GenericRepository/Domain/OutBoxMessage/Entities/OutBoxMessage.cs @@ -15,7 +15,7 @@ private OutBoxMessage(string type, string content, EventType = new OutBoxMessageEventType(eventType); } - public OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) + public static OutBoxMessage CreateByDomainEvent(IDomainEvent domainEvent) { return new OutBoxMessage(domainEvent.GetType().Name, JsonSerializer.Serialize(domainEvent)); } diff --git a/GenericRepository/Infrastructure/EfInterceptors/AddOutboxMessageInterceptor.cs b/GenericRepository/Infrastructure/EfInterceptors/AddOutboxMessageInterceptor.cs new file mode 100644 index 0000000..1afb6cc --- /dev/null +++ b/GenericRepository/Infrastructure/EfInterceptors/AddOutboxMessageInterceptor.cs @@ -0,0 +1,67 @@ +using GenericRepository.Application.Interfaces.UnitOfWork; +using GenericRepository.Domain; +using GenericRepository.Domain.Entities; +using GenericRepository.Infrastructure.Context; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Diagnostics; + +namespace GenericRepository.Infrastructure.EfInterceptors; + +public sealed class AddOutboxMessageInterceptor(IUnitOfWork unitOfWork) : SaveChangesInterceptor +{ + public override InterceptionResult SavingChanges(DbContextEventData eventData, InterceptionResult result) + { + var context = eventData.Context; + if (context != null) + { + BeforeSave(context); + } + + return base.SavingChanges(eventData, result); + } + + public override ValueTask> SavingChangesAsync( + DbContextEventData eventData, + InterceptionResult result, + CancellationToken cancellationToken = default) + { + var context = eventData.Context; + + if (context != null) + { + BeforeSave(context); + } + + return base.SavingChangesAsync(eventData, result, cancellationToken); + } + + private void BeforeSave(DbContext context) + { + var domainEvents = GetDomainEvents(context); + + foreach (IDomainEvent domainEvent in domainEvents) + { + var outboxMessage = OutBoxMessage.CreateByDomainEvent(domainEvent); + unitOfWork.OutboxMessages.Add(outboxMessage); + } + + unitOfWork.Save(); + } + private static List GetDomainEvents(DbContext context) + { + var domainEvents = context + .ChangeTracker + .Entries() + .Select(entry => entry.Entity) + .Where(e=> e.DomainEvents.Any()) + .SelectMany(entity => + { + IReadOnlyList domainEvents = entity.DomainEvents; + entity.ClearDomainEvents(); + return domainEvents; + }) + .ToList(); + + return domainEvents; + } +} \ No newline at end of file diff --git a/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs b/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs index c118519..f9db9ef 100644 --- a/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs +++ b/GenericRepository/Infrastructure/EfInterceptors/PublishDomainEventsInterceptor.cs @@ -8,7 +8,6 @@ namespace GenericRepository.Infrastructure.EfInterceptors; public sealed class PublishDomainEventsInterceptor : SaveChangesInterceptor { private readonly IPublisher _publisher; - public PublishDomainEventsInterceptor(IPublisher publisher) { _publisher = publisher; diff --git a/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs b/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs index 867c519..ce6640b 100644 --- a/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs +++ b/GenericRepository/Infrastructure/EntitytypeConfigurations/OutBoxMessageConfiguration.cs @@ -33,5 +33,7 @@ public void Configure(EntityTypeBuilder builder) { e.WithOwner(); }); + + builder.Ignore(b => b.IsProcessed); } } \ No newline at end of file diff --git a/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs b/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs index 6ffa3a2..6882639 100644 --- a/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs +++ b/GenericRepository/Infrastructure/Ioc/GenericRepositoryConfigurator.cs @@ -21,6 +21,7 @@ public static void InjectServices(IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddSingleton(); + services.AddSingleton(); services.AddTransient(typeof(IRepository<>), typeof(Repository<>)); services.AddTransient(typeof(IQueryGenericRepository<>), typeof(QueryGenericRepository<>)); services.Decorate(typeof(IQueryGenericRepository<>), typeof(CacheRepository<>));