Add ECMJobRunner.Tests and enhance DI for multi-frameworks
Added a new `ECMJobRunner.Tests` project to the solution for unit testing, including build configurations for Debug and Release. Enhanced the `DependencyExtension` class to support dependency injection for both .NET Framework 4.8 (EF6) and .NET 8 (EF Core) using conditional compilation. Registered `JobRunnerDbContext` differently based on the target framework and added AutoMapper registration for both frameworks. Updated `ECMJobRunner.Infrastructure.csproj` to include new package references for DI and AutoMapper in .NET Framework 4.8. Improved code structure and readability by removing redundant directives and aligning DI patterns across frameworks.
This commit is contained in:
@@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ECMJobRunner.Infrastructure
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ECMJobRunner.Application", "ECMJobRunner.Application\ECMJobRunner.Application.csproj", "{D97CD489-10D7-432C-9921-196F2E0505FF}"
|
||||
EndProject
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ECMJobRunner.Tests", "ECMJobRunner.Tests\ECMJobRunner.Tests.csproj", "{F64352B6-32BB-4BDE-90FD-FB77482D44E0}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
@@ -45,6 +47,10 @@ Global
|
||||
{D97CD489-10D7-432C-9921-196F2E0505FF}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D97CD489-10D7-432C-9921-196F2E0505FF}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D97CD489-10D7-432C-9921-196F2E0505FF}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{F64352B6-32BB-4BDE-90FD-FB77482D44E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{F64352B6-32BB-4BDE-90FD-FB77482D44E0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{F64352B6-32BB-4BDE-90FD-FB77482D44E0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{F64352B6-32BB-4BDE-90FD-FB77482D44E0}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
#if NET48
|
||||
using System.Data.Entity;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
#else
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
@@ -10,7 +11,6 @@ using ECMJobRunner.Infrastructure.Repositories;
|
||||
|
||||
namespace ECMJobRunner.Infrastructure
|
||||
{
|
||||
#if !NET48
|
||||
/// <summary>
|
||||
/// Dependency injection extension methods for Infrastructure layer
|
||||
/// </summary>
|
||||
@@ -24,11 +24,20 @@ namespace ECMJobRunner.Infrastructure
|
||||
/// <returns>Service collection for chaining</returns>
|
||||
public static IServiceCollection AddInfrastructure(this IServiceCollection services, string connectionString)
|
||||
{
|
||||
// Register DbContext
|
||||
#if NET48
|
||||
// Register DbContext as scoped for EF6 - same pattern as EF Core
|
||||
// Each scope (request) gets its own DbContext instance
|
||||
services.AddScoped(provider => new JobRunnerDbContext(connectionString));
|
||||
#else
|
||||
// Register DbContext as scoped for EF Core
|
||||
services.AddDbContext<JobRunnerDbContext>(options =>
|
||||
options.UseSqlServer(connectionString));
|
||||
#endif
|
||||
|
||||
// Register repositories
|
||||
// Register AutoMapper
|
||||
services.AddAutoMapper(typeof(DependencyExtension).Assembly);
|
||||
|
||||
// Register repositories as scoped (same lifetime as DbContext)
|
||||
services.AddScoped(typeof(IRepository<>), typeof(Repository<>));
|
||||
services.AddScoped<ICfgProfileRepository, CfgProfileRepository>();
|
||||
services.AddScoped<IProfileSqlJobRepository, ProfileSqlJobRepository>();
|
||||
@@ -37,5 +46,4 @@ namespace ECMJobRunner.Infrastructure
|
||||
return services;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -22,6 +22,10 @@
|
||||
<PackageReference Include="EntityFramework" Version="6.5.1" />
|
||||
<!-- AutoMapper for .NET Framework 4.8 -->
|
||||
<PackageReference Include="AutoMapper" Version="10.1.1" />
|
||||
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="8.1.1" />
|
||||
<!-- Dependency Injection for .NET Framework 4.8 -->
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="8.0.1" />
|
||||
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.2" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
|
||||
@@ -29,7 +33,7 @@
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.11" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.11" />
|
||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="8.0.11" />
|
||||
<!-- AutoMapper for .NET 8 -->
|
||||
<!-- AutoMapper for .NET 8 (includes DI extensions) -->
|
||||
<PackageReference Include="AutoMapper" Version="13.0.1" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
||||
Reference in New Issue
Block a user