You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core DI如何注入实现接口的抽象类对应的派生类实例

问题原因

你当前的注册逻辑存在两个核心错误:

  1. 抽象类无法被直接实例化,你将 IStorageTableQueryHelper 的实现指向抽象类 StorageTableQueryAbstractHelper,DI 容器在构造实例时会直接失败。
  2. 你没有将抽象类、接口和可实例化的派生类 StorageTableQueryHelper 做关联绑定,DI 容器无法知道要给抽象类类型的依赖返回什么实例。

解决方案

1. 修正 DI 注册逻辑

你需要先注册可实例化的派生类,再将抽象类和接口的服务指向该派生类的实例,保证三类依赖返回的是同一个实例:

// 首先注册你用到的ITableService实现,否则派生类构造会失败
services.AddScoped<ITableService, 你的TableService实现类名>();

// 注册派生类作为自身服务
services.AddScoped<StorageTableQueryHelper>();
// 绑定抽象类到派生类实例
services.AddScoped<StorageTableQueryAbstractHelper>(sp => sp.GetRequiredService<StorageTableQueryHelper>());
// 如果还需要支持注入接口IStorageTableQueryHelper,新增这行绑定
services.AddScoped<IStorageTableQueryHelper>(sp => sp.GetRequiredService<StorageTableQueryHelper>());

2. 修正派生类的重写语法错误

你当前派生类里重写的 ExecuteTableQueryAsyncClass 方法缺少抽象类定义要求的 new() 约束,会导致编译失败,需要补全:

// 第一个重载补new()
public override async Task<ContinuationTokenPageResult<T>> ExecuteTableQueryAsyncClass<T>(Expression<Func<TableEntity, bool>> expression, List<string> selectField) where T : class, new()
{
    // 你的业务逻辑
    return null;
}

// 第二个重载补new()
public override async Task<ContinuationTokenPageResult<T>> ExecuteTableQueryAsyncClass<T>(string query, List<string> selectField) where T : class, new()
{
    // 你的业务逻辑
    return null;
}

3. 消费端使用

注册完成后,你在消费类注入抽象类就可以正常使用所有成员(包括接口继承来的和抽象类自己定义的):

public class EShopBusinessLogicProcessor : IEShopBusinessLogicProcessor
{
    private readonly StorageTableQueryAbstractHelper _storageTableQueryHelper;

    public EShopBusinessLogicProcessor(StorageTableQueryAbstractHelper storageTableQueryHelper)
    {
        _storageTableQueryHelper = storageTableQueryHelper;
    }

    public async Task Demo()
    {
        // 可调用接口定义的Connect方法
        _storageTableQueryHelper.Connect("你的连接串", "你的表名");
        // 也可调用抽象类独有的ExecuteTableQueryAsyncClass方法
        var result = await _storageTableQueryHelper.ExecuteTableQueryAsyncClass<TestClass>(null, null);
    }
}

内容的提问来源于stack exchange,提问作者Dinesh Tripathi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 09:54:03