Ninject 2:是否有相当于1.5的InjectPropertiesWhere?

时间:2011-02-15 01:00:07

标签: c# dependency-injection ninject ninject-2

我在我的MVC项目中使用Ninject 1.5。它运行良好,但由于我们有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 个答案:

答案 0 :(得分:6)

Ninject 2不支持这种方式。您有4个选项:

  1. 切换到构造函数注入,这始终是首选的注入方式。
  2. 将Inject属性添加到您的属性(或其他属性并将其配置为inject属性)
  3. 使用WithProperty("propertyName", ctx => ctx.Kernel.Get<MyType>())
  4. 可以通过编写注入已配置属性的激活策略来添加行为。可以使用扩展方法将注入属性的配置添加到绑定元数据中。