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
出现此问题的原因是Azure Function 应用程序中使用了MicrosoftAddHttpClient<T1, T1>扩展。IServiceCollection
这是 .NET Core 3.1 框架中的一个已知问题。二进制文件中已包含一个修复程序,但它隐藏在功能标志后面。要解决此问题,请将以下设置添加到 Azure Functions 应用程序。
"AzureWebJobsFeatureFlags": "EnableEnhancedScopes"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
720 次 |
| 最近记录: |