0
我正在使用NInject。我有这样的对象Ninject构造函数绑定
interface IFoo {}
class Foo : IFoo {
public Foo(string magic, IBar bar) {}
}
我想通过只传递魔法注入一些foo。每个类的魔法是不同的,所以这应该返回不同的实例。
s_Kernel.Get<IFoo>("magic");
s_Kernel.Get<IFoo>("not-so-magic");
第一次我试图绑在我做
s_Kernel.Bind<IFoo>().To<Foo>();
但后来我有东西来看看它看起来有点蹩脚。
s_Kernel.Get<IFoo>(new ConstructorArgument("magic", magic), s_Kernel.Get<IBar>());
我不想明确地把自己绑在魔法字符串上。
我得到的印象是Bind<IFoo>().ToConstructor(ctorArg => new Foo(xxx, ctorArg.Kernel.Get<IFoo>());
几乎可以让我那里,但我不知道我应该为“xxx”放置什么,以便它查找参数。
谢谢,这看起来是我想要的,但在引擎盖下它仍然要求我保持引擎盖下的参数名称。这对我来说很可怕,因为它引入了一组奇怪的错误。我会考虑重构我的代码,不要求这样做。 –
是的,你也需要验收测试级别的某些性质的覆盖,但这需要很多东西。 (你可能会发疯,写一些Rube Goldberg的东西,它通过接口定位所有的ToFactory()调用和蜘蛛,并检查构造函数是否存在等。但是如果你甚至在考虑这一点,请阅读@ploeh测试DI配置。) –
我建议看看源代码和测试,看看是否有可用于创建la [NamedLikeFactoryMethod](https://github.com/ninject/)的可扩展性钩子ninject.extensions.factory/wiki/Factory-interface%3A-Referencing-Named-Bindings),它可能使用'Bind'流畅序列的'.ToConstructor'部分的一些机制来做一些验证? (最后一句话不应该是有道理的,但可能让你思考) –