我有以下代码:
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的成员
答案 0 :(得分:1)
不容易访问构造函数参数的类型。您可能希望更改为使用命名绑定或元数据和约束。
Bind<IFoo>().To<Foo1>().WithMetadata("Type", typeof(MyRule1))
kernel.Get<IFoo>(m => m.Get<Type>("Type", null) == typeof(myRule), ConstructorArgument("rule", myRule))
但提醒只从配置访问内核(例如属于配置的工厂)