我有一个带有以下构造函数签名IRofl
的实现的接口:DefaultRofl
public DefaultRofl(ICanHasCheezburger cheez)
ICanHasCheezburger
有几个实现,其中我需要通过 IoC 容器解决多个,我认为命名注册是正确的方法。
假设我有两个预先创建的实例,希望一个作为默认注册,另一个命名为:
container.Register<ICanHasCheezburger>(cheez1);
container.Register<ICanHasCheezburger>(cheez2, "x2");
现在我需要指定 for DefaultRofl
,应该解决“x2”注册 - 这就是我卡住的地方。我知道 Autofac 可以做到这一点,但我找不到 TinyIoC 的方法。
我本来希望这样做的方法是
container.Register<IRofl, DefaultRofl>().UsingConstructor(() => new DefaultRofl(container.Resolve<ICanHasCheezburger>("x2")));
但事实证明(我什至有点理解为什么),ICanHasCheezburger
构造函数参数只是一个虚拟参数,并没有实际评估。这意味着名称也将被忽略,并且接口的默认注册已解决 - 但这是cheez1
,我不想在这里使用它。
实际上,在杰夫阿特伍德的橡皮鸭问题解决的另一个案例中,我只是想通了:
container.Register<IRofl>((c, p) => new DefaultRofl(container.Resolve<ICanHasCheezburger>("x2")));
成功了。但是,如果我有更多的构造函数参数,我必须明确声明所有的 container.Resolve() 调用,对吧?史蒂文? ;-)