1

我有一个网络应用程序和一个 Windows 服务应用程序。

Web 应用程序注入IPersonService到它的 MVC 控制器中。

Windows 应用程序也使用IPersonService.

例如,该服务需要 3 个依赖IPersonRepo, IAddressRepo, IEmploymentRepo项。

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

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

在 Windows 服务中它更棘手。我可以离开它,这样 DBContext 是瞬态的,但这似乎是错误的。

所以我认为我可以让服务成为确定 DBContext 生命周期的范围,但我完全不确定我将如何去做以确保它适用于 Web 应用程序和 Windows 服务应用程序。

任何帮助将不胜感激

4

1 回答 1

0

如果所有 3 个存储库都使用相同的 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(); 
于 2013-04-05T08:59:20.167 回答