我有以下界面和对象
public interface IFoo{}
public interface IBar{}
public class Foo : IFoo {
public Foo(IBar bar1, IBar bar2)
{
}
}
public class Bar1 : IBar {}
public class Bar2 : IBar {}
我有以下Ninject绑定
Bind<IBar>()
.To<Bar1>()
.InSingletonScope()
.Named("bar1");
Bind<IBar>()
.To<Bar2>()
.InSingletonScope()
.Named("bar2);
Bind<IFoo>()
.To<Foo>()
.InSingletonScope()
.WithConstructorArgument("bar1", context => Kernel.Get<IBar>("bar1"))
.WithConstructorArgument("bar2", context => Kernel.Get<IBar>("bar2"));
现在这个工作,但是我真的不喜欢必须手动指定'Foo'类的构造函数值。理想情况下,我想要一些让我这么说的东西:
所有具有属性名称'bar1'的构造函数属性应使用同名的命名实例,如果命名实例不存在,则使用默认实例'Bar2'
或类似的东西。
真的,有没有更好的方法来实现我想要实现的目标?
答案 0 :(得分:1)
只需将构造函数更改为
,而不是命名实例public class Foo : IFoo
{
public Foo(IBar[] bars)
{
}
}
然后Ninject将注入每种IBar
注册的实例。