多次创建依赖注入作用域资源

Pet*_*ris 0 .net dependency-injection

发布此问题是为了帮助其他人(也发布了答案)。

我们有一个使用依赖注入(Microsoft 标准)的 Azure Functions 应用程序。

我们看到一个类Scoped在单个请求中多次注册为创建。

public class MyStrategy : IMyStrategy
{
  public MyStrategy(IUnitOfWork unitOfWork, ISomeRepository someRepository) { ... }
}

public class UnitOfWork: IUnitOfWork
{
  public UnitOfWork(ApplicationDbContext dbContext) { ... }
}

public class SomeRepository: ISomeRepository
{
  public SomeRepository(ApplicationDbContext dbContext) { ... }
}
Run Code Online (Sandbox Code Playgroud)

IMyStrategy注入 时,我们看到中的 DbContext 与中的 DbContextUnitOfWork不是同一个实例SomeRepository- 尽管所有这些都是使用 注册的services.AddScoped

对于我们来说,这意味着从我们调用时添加到ApplicationDbContextvia的新对象SomeRepository不会保存到数据库(因为我们添加到一个实例,并在另一个实例上调用Save)。ApplicationDbContext.SaveChangesAsyncUnitOfWork

Pet*_*ris 6

出现此问题的原因是Azure Function 应用程序中使用了MicrosoftAddHttpClient<T1, T1>扩展。IServiceCollection

这是 .NET Core 3.1 框架中的一个已知问题。二进制文件中已包含一个修复程序,但它隐藏在功能标志后面。要解决此问题,请将以下设置添加到 Azure Functions 应用程序。

"AzureWebJobsFeatureFlags": "EnableEnhancedScopes"
Run Code Online (Sandbox Code Playgroud)