Add conditional compilation for .NET Framework support
Updated code to support conditional compilation for .NET Framework and .NET. Introduced nullable reference types in `DbRepository.cs` and ensured proper initialization of service registration queues in `DependencyInjection.cs`. Modified `DbRepositoryFactory.cs` and `DbSetFactory.cs` to maintain consistent structure across frameworks. These changes enhance compatibility and improve type safety.
This commit is contained in:
@@ -4,8 +4,18 @@ using Microsoft.EntityFrameworkCore;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using System.Reflection;
|
||||
#if NETFRAMEWORK
|
||||
using System.Collections.Generic;
|
||||
using System;
|
||||
using System.Linq;
|
||||
#endif
|
||||
|
||||
namespace DigitalData.Core.Infrastructure;
|
||||
namespace DigitalData.Core.Infrastructure
|
||||
#if NET
|
||||
;
|
||||
#elif NETFRAMEWORK
|
||||
{
|
||||
#endif
|
||||
|
||||
public static class DependencyInjection
|
||||
{
|
||||
@@ -28,13 +38,13 @@ public static class DependencyInjection
|
||||
public class RepositoryConfiguration
|
||||
{
|
||||
// 1. register from assembly
|
||||
private readonly Queue<Action<IServiceCollection>> RegsFromAssembly = new();
|
||||
private readonly Queue<Action<IServiceCollection>> RegsFromAssembly = new Queue<Action<IServiceCollection>>();
|
||||
|
||||
// 2. register entities (can overwrite)
|
||||
private readonly Queue<Action<IServiceCollection>> RegsEntity = new();
|
||||
private readonly Queue<Action<IServiceCollection>> RegsEntity = new Queue<Action<IServiceCollection>>();
|
||||
|
||||
// 3. register db set factories (can overwrite)
|
||||
private readonly Queue<Action<IServiceCollection>> RegsDbSetFactory = new();
|
||||
private readonly Queue<Action<IServiceCollection>> RegsDbSetFactory = new Queue<Action<IServiceCollection>>();
|
||||
|
||||
internal void RegisterAllServices(IServiceCollection services)
|
||||
{
|
||||
@@ -76,7 +86,11 @@ public static class DependencyInjection
|
||||
.GetMethod(nameof(AddDbSetFactory),
|
||||
BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.Public);
|
||||
|
||||
var genericMethod = addDbSetFactoryMethod!.MakeGenericMethod(typeof(TDbContext), entityType);
|
||||
var genericMethod = addDbSetFactoryMethod
|
||||
#if NET
|
||||
!
|
||||
#endif
|
||||
.MakeGenericMethod(typeof(TDbContext), entityType);
|
||||
genericMethod.Invoke(null, new [] { services, null });
|
||||
#endregion DbSetFactory
|
||||
}
|
||||
@@ -85,7 +99,11 @@ public static class DependencyInjection
|
||||
RegsFromAssembly.Enqueue(reg);
|
||||
}
|
||||
|
||||
public void RegisterEntity<TDbContext, TEntity>(Func<TDbContext, DbSet<TEntity>>? dbSetFactory = null)
|
||||
public void RegisterEntity<TDbContext, TEntity>(Func<TDbContext, DbSet<TEntity>>
|
||||
#if NET
|
||||
?
|
||||
#endif
|
||||
dbSetFactory = null)
|
||||
where TDbContext : DbContext
|
||||
where TEntity : class
|
||||
{
|
||||
@@ -109,12 +127,25 @@ public static class DependencyInjection
|
||||
queue.Dequeue().Invoke(services);
|
||||
}
|
||||
|
||||
internal static IServiceCollection AddDbSetFactory<TDbContext, TEntity>(this IServiceCollection services, Func<TDbContext, DbSet<TEntity>>? create = null)
|
||||
internal static IServiceCollection AddDbSetFactory<TDbContext, TEntity>(this IServiceCollection services, Func<TDbContext, DbSet<TEntity>>
|
||||
#if NET
|
||||
?
|
||||
#endif
|
||||
create = null)
|
||||
where TDbContext : DbContext
|
||||
where TEntity : class
|
||||
{
|
||||
#if NET
|
||||
create ??= ctx => ctx.Set<TEntity>();
|
||||
#elif NETFRAMEWORK
|
||||
if(create is null)
|
||||
create = ctx => ctx.Set<TEntity>();
|
||||
#endif
|
||||
services.AddSingleton(_ => new DbSetFactory<TDbContext, TEntity>(create));
|
||||
return services;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if NETFRAMEWORK
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user