我有一个使用 Ninject3(NuGet 安装)的 ASP.NET MVC 应用程序。解决方案包含:
- 一个 MVC 项目(组合根);
- 领域模型项目;
- 数据层项目;
- 调度程序项目(在 Windows 服务中运行计划作业并持有替代组合根);
- 其他一些项目。
我正在遵循将许多小模块分布在定义绑定的项目中的方法。两个组合根使用完全相同的绑定。
我无法弄清楚如何为类库中的模块配置范围。例如,给定这些绑定:
Bind<IDomainService1>()
.To<Service1Impl>()
.InSingletonScope(); //This should always be a singleton
Bind<IDomainService2>()
.To<Service2Impl>(); //No scope specified
我总是想要一个 的实例Service1Impl
,而范围Service2Impl
应该取决于使用的组合根。MVC 项目应该有InRequestScope()
for Service2Impl
(以及所有其他未指定范围的绑定)。不在 http 上下文中运行的调度程序项目应该使用InThreadScope()
.
这种方法正确吗?如果是,那么配置此行为的正确方法是什么?