Ninject 2: Есть ли эквивалент InjectProperties в 1,5? - PullRequest
3 голосов
/ 15 февраля 2011

Я использую Ninject 1.5 в своем проекте MVC. Это работает хорошо, но так как у нас есть Ninject 2, я мог бы обновить (и дополнительно использовать поведение на запрос, что не работало должным образом в 1.5) В Ninject 1.5 была функция InjectPropertiesWhere, чего нет в Ninject 2 (по крайней мере, так было, когда я тестировал ее некоторое время назад). Есть ли что-то подобное?

Пример InjectPropertiesWhere:

return Bind<IUserService>().To<UserService>()
    .InjectPropertiesWhere(p => p.Name.EndsWith("Repository"))
    .InjectPropertiesWhere(p => p.Name.EndsWith("Service"))
    .InjectPropertiesWhere(p => p.Name == "ApplicationCache")
    .InjectPropertiesWhere(p => p.Name == "CurrentPrincipal")
    .InjectPropertiesWhere(p => p.Name == "CTEmailSender")
    .InjectPropertiesWhere(p => p.Name == "CTSettings");

1 Ответ

6 голосов
/ 15 февраля 2011

Это не поддерживается Ninject 2. У вас есть 4 варианта:

  1. Переключение на инжектор конструктора, который всегда является предпочтительным способом инъекции.
  2. Добавьте атрибут Inject в свои свойства (или другой атрибут и настройте его как атрибут inject)
  3. Использование WithProperty("propertyName", ctx => ctx.Kernel.Get<MyType>())
  4. Поведение можно добавить, написав стратегию активации, которая внедряет настроенные свойства. Конфигурация, свойства которой должны быть введены, может быть добавлена ​​к метаданным привязок с использованием метода расширения.
...