0

我有以下接口和对象

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'

或类似的规定。

所以真的,有没有更好的方法来做我想要实现的目标?

4

1 回答 1

1

而不是命名实例,只需将构造函数更改为

public class Foo : IFoo 
{
    public Foo(IBar[] bars)
    {
    }
}

然后 Ninject 会为每种IBar注册类型注入一个实例。

于 2013-08-06T12:59:33.023 回答