根据ConstructorArgument从Ninject获取不同的对象

时间:2011-10-24 15:05:11

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

我有以下代码:

kernel.Get<IFoo>(new ConstructorArgument("rule", myRule))

我想根据myRule中的值得到不同的对象。我怎么做? 像这样的psedocode

Bind<IFoo>().To<Foo1>().When(x=>x.Parameters[0].Value.Type=="type1")
Bind<IFoo>().To<Foo2>().When(x=>x.Parameters[0].Value.Type=="type2")

其中Type是myRule的成员

1 个答案:

答案 0 :(得分:1)

不容易访问构造函数参数的类型。您可能希望更改为使用命名绑定或元数据和约束。

Bind<IFoo>().To<Foo1>().WithMetadata("Type", typeof(MyRule1))
kernel.Get<IFoo>(m => m.Get<Type>("Type", null) == typeof(myRule), ConstructorArgument("rule", myRule))

但提醒只从配置访问内核(例如属于配置的工厂)