我使用Asp.net core 8进行了以下NUnit测试.

public class DevextremeTests 
{
    private WebApplicationFactory<Program> _factory;

    public DevextremeTests()
    {
        _factory = new WebApplicationFactory<Program>();
    }

    [Test]
    public void Can_get_grid()
    {
        using (var scope = _factory.Services.CreateScope())
        {
            var scopedServices = scope.ServiceProvider;
            var companyServices = scopedServices.GetRequiredService<CompanyServices>(); //not null
            var autoQuery = scopedServices.GetRequiredService<IAutoQueryDb>(); //not null
            // companyServices.AutoQuery is null 
        }
    }
}

companyServices人,但该服务上还有其他服务,例如

[FromServices]
public IAutoQueryDb AutoQuery { get; set; } //null
[FromServices]
public ApplicationDbContext Ef { get; set; } //null

在主应用程序中,嵌套服务加载良好.

如果我从使用[FromServices]切换到构造函数注入,那么它就会工作并且嵌套服务会填充.

为什么[FromServices]不能与WebApplicationFactory<Program>()一起工作?

推荐答案

因为FromServicesAttribute提供了ASP.NET Core特定的绑定:

指定应使用request个服务绑定参数或属性.

内置DI不是support property injection:

我们建议使用内置容器,除非您需要它不支持的特定功能,例如:

  • 财产注入
  • ...

通过该属性的机制是针对每个请求(即Web请求)的controller actionsminimal API handlersRazor pages特定的ASP.NET Core请求.这里没有请求,只有一个"普通"DI容器.

Csharp相关问答推荐

元素存在方法是否损坏

我应该将新的httpReportMessage()包装在using声明中吗?

等待限制选项似乎不适用于频道

有没有一种方法可以在包含混合文本的标签中嵌入超链接?

一种安全的方式来存储SSH凭证(MAUI/C#应用程序)

MAUI查询参数单一字符串项将不起作用

获取具有AutoFaces的所有IOptions对象的集合

在静态模式下实例化配置

Automapper 12.x将GUID映射到字符串

单元测试:模拟返回空

正在try 从Blazor中的API读取JSON

如何在microsoft.clearscript.v8的jsondata中使用Linq

将FileStream的特定部分作为字节数组读取

将C#类导入到PowerShell

Visual Studio如何使用当前的框架?

使用DI实例化带有动态参数的服务?

在Visual Studio 2022中查找Xamarin模板时遇到问题

实体框架允许您具有筛选的属性吗?

在Swagger中显示自定义属性的属性名称

LINQ在GROUP BY和JOIN之后获取子列表