我正在构建一个Blazor服务器前端,用于现有的领域层。该层提供各种可注入服务来对EF Core存储库进行修改。为此,这些服务本身会从(标准的Microsoft)DI容器中请求一个DbContext。这在具有作用域DbContext实例的常规MVC.NET/Razor页面中可以正常工作,但是如所述,在Blazor中存在问题。在Blazor Server应用程序中,我们希望使用DbContextFactory生成用于操作的短暂DbContext实例。
在同一应用程序中拥有DbContext和DbContextFactory没有问题,但我正在努力理解如何调整我的服务,或者是否需要这样做?为了说明问题,这是当前的代码:
我的页面:
在同一应用程序中拥有DbContext和DbContextFactory没有问题,但我正在努力理解如何调整我的服务,或者是否需要这样做?为了说明问题,这是当前的代码:
我的页面:
@page “/items”
@inject ItemService ItemService
// somewhere in the code
ItemService.DoOperation(…)
我的服务
class ItemService
{
public ItemService(MyDbContext myDbContext)
{
…
}
public bool DoOperation(…)
{
…
_myDbContext.SaveChanges();
}
}
Startup.cs:
services.AddDbContext<MyDbContext>(options => …),
contextLifetime: ServiceLifetime.Transient,
optionsLifetime: ServiceLifetime.Singleton
);
services.AddDbContextFactory<MyDbContext>(options => …);
我根据这个答案中提供的示例,已经更改了DbContext的生命周期,并且到目前为止,我还没有遇到任何问题,但是我不完全理解这里涉及的生命周期问题。我该如何设计我的服务,以明显的方式在Blazor和MVC/Razor Pages应用程序中使用?