From 41467e36b558856735313364dd8c656619e9e65b Mon Sep 17 00:00:00 2001 From: Kamran Sadin Date: Sat, 21 Jun 2025 18:33:39 +0330 Subject: [PATCH] Change name of Service Registration method --- Samples/MediatorSampleApp/Program.cs | 2 +- src/KSFramework/Contracts/IInjectable.cs | 6 +++ .../IInjectableAndImplementations.cs | 6 +++ .../Extensions/RegisterMediatorServices.cs | 42 +++++++++++++++++-- .../KSMessaging/IRequestDecorator.cs | 6 --- .../Messaging/MediatorTests.cs | 2 +- .../AddKSMediatorNotificationTests.cs | 4 +- .../Configuration/AddKSMediatorTests.cs | 2 +- .../AddKSMediatorRegistrationTests.cs | 4 +- 9 files changed, 58 insertions(+), 16 deletions(-) create mode 100644 src/KSFramework/Contracts/IInjectable.cs create mode 100644 src/KSFramework/Contracts/IInjectableAndImplementations.cs delete mode 100644 src/KSFramework/KSMessaging/IRequestDecorator.cs diff --git a/Samples/MediatorSampleApp/Program.cs b/Samples/MediatorSampleApp/Program.cs index 6e5f80d..efcd0f6 100644 --- a/Samples/MediatorSampleApp/Program.cs +++ b/Samples/MediatorSampleApp/Program.cs @@ -11,7 +11,7 @@ services.AddValidatorsFromAssembly(typeof(Program).Assembly); -services.AddKSMediator(Assembly.GetExecutingAssembly()); +services.AddKSFramework(Assembly.GetExecutingAssembly()); var provider = services.BuildServiceProvider(); diff --git a/src/KSFramework/Contracts/IInjectable.cs b/src/KSFramework/Contracts/IInjectable.cs new file mode 100644 index 0000000..0b22765 --- /dev/null +++ b/src/KSFramework/Contracts/IInjectable.cs @@ -0,0 +1,6 @@ +namespace KSFramework.Contracts; + +public interface IInjectable +{ + +} \ No newline at end of file diff --git a/src/KSFramework/Contracts/IInjectableAndImplementations.cs b/src/KSFramework/Contracts/IInjectableAndImplementations.cs new file mode 100644 index 0000000..2585fc4 --- /dev/null +++ b/src/KSFramework/Contracts/IInjectableAndImplementations.cs @@ -0,0 +1,6 @@ +namespace KSFramework.Contracts; + +public interface IInjectableAndImplementations +{ + +} \ No newline at end of file diff --git a/src/KSFramework/KSMessaging/Extensions/RegisterMediatorServices.cs b/src/KSFramework/KSMessaging/Extensions/RegisterMediatorServices.cs index 95228eb..3287ccf 100644 --- a/src/KSFramework/KSMessaging/Extensions/RegisterMediatorServices.cs +++ b/src/KSFramework/KSMessaging/Extensions/RegisterMediatorServices.cs @@ -1,6 +1,7 @@ using KSFramework.KSMessaging.Abstraction; using Microsoft.Extensions.DependencyInjection; using System.Reflection; +using KSFramework.Contracts; using KSFramework.KSMessaging.Behaviors; namespace KSFramework.KSMessaging.Extensions; @@ -16,12 +17,13 @@ public static class RegisterMediatorServices /// The service collection. /// The assemblies to scan. /// The service collection. - public static IServiceCollection AddKSMediator(this IServiceCollection services, params Assembly[] assemblies) + public static IServiceCollection AddKSFramework(this IServiceCollection services, params Assembly[] assemblies) { services.AddScoped(); services.AddScoped(sp => sp.GetRequiredService()); - services.RegisterAllImplementationsOf(assemblies); + services.RegisterAllImplementations(assemblies); + services.RegisterAllImplementationsOf(assemblies); services.Scan(scan => scan .FromAssemblies(assemblies) @@ -78,7 +80,41 @@ public static IServiceCollection AddKSMediator(this IServiceCollection services, return services; } - public static IServiceCollection RegisterAllImplementationsOf(this IServiceCollection services, + private static IServiceCollection RegisterAllImplementationsOf(this IServiceCollection services, + Assembly[] assemblies, + ServiceLifetime lifetime = ServiceLifetime.Scoped) + { + var interfaceType = typeof(TInterface); + + foreach (var assembly in assemblies) + { + var implementations = assembly.DefinedTypes + .Where(type => type.IsClass && !type.IsAbstract && interfaceType.IsAssignableFrom(type)) + .ToList(); + + foreach (var implementation in implementations) + { + switch (lifetime) + { + case ServiceLifetime.Transient: + services.AddTransient(interfaceType, implementation); + break; + case ServiceLifetime.Scoped: + services.AddScoped(interfaceType, implementation); + break; + case ServiceLifetime.Singleton: + services.AddSingleton(interfaceType, implementation); + break; + default: + throw new ArgumentException("Invalid service lifetime", nameof(lifetime)); + } + } + } + + return services; + } + + private static IServiceCollection RegisterAllImplementations(this IServiceCollection services, Assembly[] assemblies, ServiceLifetime lifetime = ServiceLifetime.Scoped) { diff --git a/src/KSFramework/KSMessaging/IRequestDecorator.cs b/src/KSFramework/KSMessaging/IRequestDecorator.cs deleted file mode 100644 index 0d270fd..0000000 --- a/src/KSFramework/KSMessaging/IRequestDecorator.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace KSFramework.KSMessaging; - -public interface IRequestDecorator -{ - -} \ No newline at end of file diff --git a/tests/KSFramework/KSFramework.IntegrationTests/Messaging/MediatorTests.cs b/tests/KSFramework/KSFramework.IntegrationTests/Messaging/MediatorTests.cs index 2f2e321..76db1a5 100644 --- a/tests/KSFramework/KSFramework.IntegrationTests/Messaging/MediatorTests.cs +++ b/tests/KSFramework/KSFramework.IntegrationTests/Messaging/MediatorTests.cs @@ -41,7 +41,7 @@ protected override void ConfigureServices(IServiceCollection services) { base.ConfigureServices(services); - services.AddKSMediator(typeof(MediatorTests).Assembly); + services.AddKSFramework(typeof(MediatorTests).Assembly); } [Fact] diff --git a/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorNotificationTests.cs b/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorNotificationTests.cs index 045e36d..98538dc 100644 --- a/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorNotificationTests.cs +++ b/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorNotificationTests.cs @@ -5,7 +5,7 @@ namespace KSFramework.UnitTests.Configuration; /// -/// Tests for verifying notification handlers and behaviors registration through AddKSMediator. +/// Tests for verifying notification handlers and behaviors registration through AddKSFramework. /// public class AddKSMediatorNotificationTests { @@ -51,7 +51,7 @@ public async Task AddKSMediator_Should_Register_NotificationHandler_And_Behavior // Arrange var services = new ServiceCollection(); - services.AddKSMediator(typeof(TestNotification).Assembly); + services.AddKSFramework(typeof(TestNotification).Assembly); services.AddSingleton, TestNotificationHandler>(); services.AddSingleton, TestNotificationBehavior>(); diff --git a/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorTests.cs b/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorTests.cs index 32be322..faf8192 100644 --- a/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorTests.cs +++ b/tests/KSFramework/KSFramework.UnitTests/Configuration/AddKSMediatorTests.cs @@ -13,7 +13,7 @@ public async Task AddKSMediator_RegistersHandlersAndBehaviorsFromAssembly() // Arrange var services = new ServiceCollection(); - services.AddKSMediator(typeof(MultiplyByTwoRequest).Assembly); + services.AddKSFramework(typeof(MultiplyByTwoRequest).Assembly); var provider = services.BuildServiceProvider(); diff --git a/tests/KSFramework/KSFramework.UnitTests/Mediator/Registration/AddKSMediatorRegistrationTests.cs b/tests/KSFramework/KSFramework.UnitTests/Mediator/Registration/AddKSMediatorRegistrationTests.cs index 901dedb..4296cac 100644 --- a/tests/KSFramework/KSFramework.UnitTests/Mediator/Registration/AddKSMediatorRegistrationTests.cs +++ b/tests/KSFramework/KSFramework.UnitTests/Mediator/Registration/AddKSMediatorRegistrationTests.cs @@ -5,7 +5,7 @@ namespace KSFramework.UnitTests.Mediator.Registration; /// -/// Unit tests for AddKSMediator service registration. +/// Unit tests for AddKSFramework service registration. /// public class AddKSMediatorRegistrationTests { @@ -54,7 +54,7 @@ public async Task AddKSMediator_RegistersHandlersAndBehaviorsCorrectly() { // Arrange var services = new ServiceCollection(); - services.AddKSMediator(typeof(AddKSMediatorRegistrationTests).Assembly); + services.AddKSFramework(typeof(AddKSMediatorRegistrationTests).Assembly); var provider = services.BuildServiceProvider(); var mediator = provider.GetService();