C# 如何在dotnetcore中实现开放泛型构造函数注入
我有一个审计日志的界面:C# 如何在dotnetcore中实现开放泛型构造函数注入,c#,.net-core,dependency-injection,open-generics,C#,.net Core,Dependency Injection,Open Generics,我有一个审计日志的界面: public interface IAuditDbContext<T1, T2> { T1 AuditLog { get; set; } T2 ChangeTracker { get; } } 公共接口IAuditDbContext { T1审核日志{get;set;} T2 ChangeTracker{get;} } 现在在主AppDbContext接口中,我将其继承为: public interface IAppDBContext<
public interface IAuditDbContext<T1, T2>
{
T1 AuditLog { get; set; }
T2 ChangeTracker { get; }
}
公共接口IAuditDbContext
{
T1审核日志{get;set;}
T2 ChangeTracker{get;}
}
现在在主AppDbContext接口中,我将其继承为:
public interface IAppDBContext<T1, T2> : IAuditDbContext<T1,T2>
{
Task<int> SaveChangesAsync(CancellationToken cancellationToken);
}
公共接口IAppDBContext:IAuditDbContext
{
任务保存更改同步(CancellationToken CancellationToken);
}
在主AppDbContext类中,我继承为:
public class AppDBContext : DbContext, IAppDBContext<DbSet<Audit>, ChangeTracker>
{
....
}
公共类AppDBContext:DbContext,IAppDBContext
{
....
}
问题是,在依赖项注入时,我正试图像这样注入它:
services.AddScoped(
typeof(IAppDBContext<,>),
typeof(IAuditDbContext<,>).MakeGenericType(typeof(AppDBContext)));
services.AddScoped(
类型(IAppDBContext),
typeof(IAuditDbContext).MakeGenericType(typeof(AppDBContext));
我也尝试过其他方法,但没有成功-
我收到的一些错误消息包括:
错误消息:
2[T1,T2]'用于服务类型“Common.Application.Interfaces.IAppDBContext
2[T1,T2]”IAuditDbContext
界面中有两个通用参数,因此需要为MakeGenericType
方法提供两个参数
但是,我不确定这是否是您所需要的。
您应该将接口映射到可能启动的某些类,而不是接口
services.AddScoped(typeof(IAppDBContext<,>), typeof(AppDBContext)); //example
services.addScope(typeof(IAppDBContext),typeof(AppDBContext))//例子
但是您真的需要注册开放泛型类型吗