将DBContext作用域设置为isservice

本文关键字:isservice 设置 作用域 DBContext | 更新日期: 2023-09-27 18:07:25

我有一个web应用程序和一个windows服务应用程序。

web应用将IPersonService注入到它的MVC控制器中。

windows应用程序也使用IPersonService

IPersonRepo, IAddressRepo, IEmploymentRepo为例,业务依赖3。

存储库的实现采用DBContext用于实体框架的使用。

在web应用程序中,我可以将DBContext注册为Bind<MyContext>().ToSelf().InRequestScope();

在windows服务中更棘手。我可以让DBContext是暂时的,但这似乎是错误的。

所以我认为我可以使服务成为确定DBContext生命周期的范围,但我完全不确定我将如何去做,以确保它在web应用程序和windows服务应用程序中运行良好。

如有任何帮助,不胜感激

将DBContext作用域设置为isservice

如果所有3个repos都使用相同的DbContext实例很重要,您可以这样做:

var context = new DbContext(...);
Bind<IPersonRepo>().To<PersonRepo>().WithConstructorArgument("dbContext", context);
Bind<IAddressRepo>().To<AddressRepo>().WithConstructorArgument("dbContext", context);
Bind<IEmploymentRepo>().To<EmploymentRepo>().WithConstructorArgument("dbContext", context);

就像这样,同一个上下文实例在多个repos之间共享。

如果存储库不知道彼此的实体(以及对这些实体的更改),您可以简单地在每个repo中注入一个DbContext的新实例,通过在瞬态作用域(默认行为)中绑定:

Bind<MyContext>().ToSelf();