我有一个网络应用程序和一个Windows服务应用程序。
Web应用程序将IPersonService
注入其MVC控制器。
Windows应用也使用IPersonService
。
例如,该服务在IPersonRepo, IAddressRepo, IEmploymentRepo
上有3个依赖项。
存储库的实现需要DBContext
才能使用实体框架。
在Web应用程序中,我可以将DBContext注册为Bind<MyContext>().ToSelf().InRequestScope();
在Windows服务中它比较棘手。我可以离开它,所以DBContext是暂时的,但这似乎是错误的。
所以我认为我可以将服务作为确定DBContext生命周期的范围,但我完全不确定如何确保它适用于Web应用程序和Windows服务应用程序。
非常感谢任何帮助
答案 0 :(得分:0)
如果所有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之间共享相同的上下文实例。
如果存储库不了解彼此的实体(以及对这些实体的更改),您可以通过在瞬态范围内绑定(默认行为),在每个存储库中注入一个新的DbContext实例:
Bind<MyContext>().ToSelf();