gpt4 book ai didi

c# - DI 未从子接口(interface)解析基本接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-03 22:33:11 25 4
gpt4 key购买 nike

我有一个相当简单的存储库设计设置。使用 DI 解析 Controller 构造函数中的存储库。

然而,DI 的行为相当奇怪。它似乎无法解析作为已注册接口(interface)的基础解析的依赖项。我相信它应该能够做到这一点,因为满足子接口(interface)的任何类型也必须满足基础。

有兴趣知道是否有人知道为什么会发生这种情况?

例子:

基础接口(interface)

public interface IReadOnlyRepository<T>
{
void DoSomething();
}

子接口(interface)

public interface IReadWriteRepository<T> : IReadOnlyRepository<T>
{
void DoSomethingElse();
}

实现

public class AccountRepository: IReadWriteRepository<Account>
{
public void DoSomething() { /* BLAH */ }
public void DoSomethingElse() { /* BLAH */ }
}

注册

services.AddTransient<IReadWriteRepository<Account>, AccountRepository>();

分辨率

provider.Resolve<IReadWriteRepository<Account>>(); // SUCCEEDS :)
provider.Resolve<IReadOnlyRepository<Account>>(); // FAILS! :(

最佳答案

这不是依赖注入(inject)的工作方式。如果你想要IReadOnlyRepository<Account>解决AccountRepository你也必须注册。

services.AddTransient<IReadOnlyRepository<Account>, AccountRepository>();

否则,DI 容器怎么知道要生成什么。想象一下你的想法实际上会起作用,如果你要求它解决 IDisposable 会发生什么?或 IEnumerable ?它无法神奇地知道你需要什么,你必须明确。

关于c# - DI 未从子接口(interface)解析基本接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56393738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com