Ninject - применяются ли области к привязке или целевому объекту? - PullRequest
3 голосов
/ 20 февраля 2012

Будет ли следующий код в Ninject использовать один и тот же экземпляр UnitOfWork для обеих привязок или будет создано два суммарных экземпляра для каждого запроса, по одному для каждой привязки?

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

Если первое не соответствует действительности, как я могу сделать запросы для IUnitOfWork и UnitOfWork, оба активируют один и тот же экземпляр UnitOfWork для одного и того же запроса?

У меня есть модуль, в котором один из внутренних классов зависит от свойства в конкретной реализации IUnitOfWork, поэтому мне также требуется самосвязывание.

Ответы [ 2 ]

3 голосов
/ 20 февраля 2012

Ninject 3.0.0 позволяет вам

Bind<UnitOfWork, IUnitOfWork>().To<UnitOfWork>().InRequestScope();
2 голосов
/ 20 февраля 2012

В ответ на ваш вопрос нет, они будут создавать разные экземпляры в зависимости от того, запрашиваете ли вы IUnitOfWork или UnitOfWork. Чтобы обойти это, добавьте расширение ContextPreservation и используйте следующую привязку:

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

Вот сообщение Remos о том, почему вы делаете это и некоторые другие альтернативы, если вы не хотите импортировать библиотеку http://www.planetgeek.ch/2010/12/08/ninject-extension-contextpreservation-explained/

...