为什么我不能在Ninect中执行以下操作?
Kernel.Bind<IPresenter>.To<DefaultPresenter>();
Kernel.Bind<IPresenter>.To<DashboardPresenter>();
Kernel.Bind<IPresenter>.To<HeartRatePresenter>();
Kernel.Bind<IPresenter>.To<GPSPresenter>();
Run Code Online (Sandbox Code Playgroud)
4个实现中的每一个都有不同的构造函数,期望不同的类型.当我尝试这个时,Ninject会抛出一个异常,告诉我我不能多次绑定到同一个界面.
在Presentable所有presenter类继承的类中,我试图在页面/视图中Kernel.Get<IPresenter>(new ConstructorArgument("view", this))分配IPresentable Presenter页面/视图,其中页面/视图实现了演示者期望作为参数的接口.
有什么方法可以让ninject识别不同的构造函数参数类型?
Rob*_*ack 23
绑定到多个接口很好.Ninject允许这样做.请看这里:https://github.com/ninject/Ninject/wiki/Multi-injection
问题是Ninject不能只是根据构造函数参数神奇地给你你想要的"一个".Ninject旨在处理您编写的代码是为了在您请求List时立即为您提供所有绑定.
所以像其他人说的那样,如果你只想要一个实例,那么听起来你想要的是上下文绑定.然而,你问你的问题和其他答案的方式有点混乱,因为它听起来像多次注射是不可能的,但它是可能的,如果它真的是你想要的.(在这种情况下不是)
Bat*_*nit 12
你需要告诉ninject它应该知道选择哪个绑定.
看看条件绑定:https: //github.com/ninject/ninject/wiki/Contextual-Binding
我建议使用.When(...)语法,但您可能更喜欢使用.Named(...)(iE为每个绑定分配名称/标识符,并在.Get<IPresenter>("SomeName")调用中将该名称传递给ninject ).