我想知道这样的事情在.NET6中是否可能发生.

给出一个具有另外3个数据库的应用程序,每个数据库都使用自己的DbContext,在一个实体上创建一个泛型DbContext,如下所示:

public class DbRepository<TRepository, TEntity> : IDbRepository<TRepository, TEntity> where TRepository : IContext

services.AddScoped(typeof(IDbRepository<,>), typeof(DbRepository<,>));

通过实施:

public class FirstDbContext : IFirstDbContext
public class SecondDbContext : ISecondDbContext

现在,也是同一个TRepository的BaseService:

public class BaseService<TRepository> where TRepository : IContext

我可以根据BaseService中的TRepository限制传递给服务的内容吗?

因此:

public class UserService : BaseService<IFirstDbContext>
{
    public UserService(
        IDbRepository<IFirstDbContext, User>  userDbRepository, /* allowed */
        IDbRepository<ISecondDbContext, Invoice> invoiceDbRepository, /* not allowed */
    ) { }
}

如果UserService定义为BaseService<IFirstDbContext>,则仅允许注入类型IDbRepository<IFirstDbContext, TEntity>.

推荐答案

不,至少使用语言类型系统.你唯一能做的就是写custom Roslyn analyzer,它会处理你的文件并发出相应的警告/错误.

Csharp相关问答推荐

WeakHandle .NET核心与.NET框架

如何设置和接收自定义Visual Studio项目命令的参数

如何在Reflection. Emit中使用具有运行时定义的类型参数的泛型类型

如何修改中间件或其注册以正确使用作用域服务?

dotnet集合中内部数组的局部变量副本的用途是什么?'

如何从ASP.NET核心MVC视图和Blazor传递数据

C#带主体的主构造函数?

C#普罗米修斯指标

未在数据流块之间传播完成

如何在C#中创建VS代码中的控制台应用程序时自动生成Main方法

如何向事件添加成员

ASP.NET Core MVC将值从视图传递到控制器时出现问题

如何在.NET AOT中为所有枚举启用JsonStringEnumConverter

记录类型';==运算符是否与实现IEquatable<;T&>;的类中的';equals&>方法执行等价比较?

同一组件的多个实例触发相同的事件处理程序

如何更改新创建的实例的变量?

C#无法将.csv列转换为用于JSON转换的列表

如何将默认区域性更改为fr-FR而不是en-US?

Visual Studio,Docker容器-容器调用:连接被拒绝

无法使用直接URL通过PictureBox.ImageLocation加载图像