将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服务应用程序中运行良好。
如有任何帮助,不胜感激
如果所有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();