【问题标题】:DI Issue when trying to get Interface尝试获取接口时的 DI 问题
【发布时间】:2021-10-02 13:45:36
【问题描述】:

所以我遇到了一些我不明白的 DI 问题。我看到了一些类似的帖子,我尝试了他们推荐的方法,但我没有任何运气。这是我得到的错误

“无法解析类型 'IRetrieveService' 的服务,而 尝试激活“UpdateService”

这是我的更新服务设置方式

private readonly IAsyncPolicy<SaveDocumentsResult> _processDocumentUpdatesPolicy;
private readonly IRetrieveService _retrieveService;
private readonly ISaveService _saveService;

public UpdateService(
    IAsyncPolicy<SaveDocumentsResult> processDocumentUpdatesPolicy,
    IRetrieveService retrieveService,
    ISaveService saveService)
{
    _processDocumentUpdatesPolicy = processDocumentUpdatesPolicy ?? throw new ArgumentNullException(nameof(processDocumentUpdatesPolicy));
    _retrieveService = retrieveService ?? throw new ArgumentNullException(nameof(retrieveService));
    _saveService = saveService ?? throw new ArgumentNullException(nameof(saveService));
}

最后,我在其中添加了我的服务

Services.AddScoped<IRetrieveService, RetrieveService>();
Services.AddScoped<ISaveService, SaveService>();

【问题讨论】:

  • 您能说明一下您是如何在 DI 中注册UpdateService 的吗?你能展示RetrieveService 的定义(至少是构造函数),以及它具有的任何依赖项吗?你能发布完整的堆栈跟踪吗?
  • 这个注册看起来没问题。可能是 RegistrationService 类缺少一些依赖项
  • 尝试将服务添加为单例(暂时),看看是否有帮助。也许这会引导您找到更好的解决方案。
  • 另外,我知道这似乎很明显,但实际上是在拨打AddScoped 吗?
  • 你能把IRetrieveService和RetrieveService的相关代码贴出来吗?另外,关于UpdateService Constructor方法,你注册过Up​​dateService类吗?

标签: c# asp.net-core dependency-injection


【解决方案1】:

您的代码中没有任何内容表明有关 IRetreiverService 和实施的任何问题。我认为您的服务设置一定有问题。

尝试查看以下链接。它描述了不同的用法。

AddTransient, AddScoped and AddSingleton Services Differences

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2017-04-27
    相关资源
    最近更新 更多