Ninject - 范围是否适用于绑定或目标对象?

时间:2012-02-19 23:35:11

标签: ninject

Ninject中的以下代码是否会对两个绑定使用相同的UnitOfWork实例,或者每个请求会创建两个总实例,每个绑定一个?

Bind<IUnitOfWork>().To<UnitOfWork>().InRequestScope();
Bind<UnitOfWork>().To<UnitOfWork>().InRequestScope();

如果前者不是这样,我怎样才能对IUnitOfWork和UnitOfWork发出请求,为同一个请求激活相同的UnitOfWork实例?

我有一个模块,其中一个内部类依赖于IUnitOfWork特定实现中的属性,这也是我需要自绑定的原因。

2 个答案:

答案 0 :(得分:3)

Ninject 3.0.0允许你

Bind<UnitOfWork, IUnitOfWork>().To<UnitOfWork>().InRequestScope();

答案 1 :(得分:2)

在回答您的问题时,这些将根据您请求IUnitOfWork或UnitOfWork的情况创建不同的实例。要解决此问题,请添加ContextPreservation扩展并使用以下绑定:

Bind<UnitOfWork>().ToSelf().InRequestScope();
this.BindInterfaceToBinding<IUnitOfWork, UnitOfWork>();

Heres Remos发布了为什么要这样做以及其他一些替代方案,如果您不想导入库http://www.planetgeek.ch/2010/12/08/ninject-extension-contextpreservation-explained/