更新
我设法解决了这个问题.现在我检查自己,是否可以解决依赖关系.如果没有,我将寻找一个无参数构造函数(通过Reflection)并调用它.但我认为这是Ninjects的工作份额...所以更多的是解决方法而不是真正的解决方案.
原始问题
public class Test
{
public Test(INavigationService asd)
{
// rnd stuff
}
public Test()
{
// other rnd stuff
}
}
Run Code Online (Sandbox Code Playgroud)
我有这个Test课程.现在,我想要它的两个实例,由Ninject创建.所以我做了以下事情:
Test test = Kernel.Get<Test>();
Run Code Online (Sandbox Code Playgroud)
并遇到异常:"Ninject.ActivationException:激活INavigationService时出错".
如果我像这样重新排序构造函数
public class Test
{
public Test()
{
// other rnd stuff
}
public Test(INavigationService asd)
{
// rnd stuff
}
}
Run Code Online (Sandbox Code Playgroud)
有用.但我无法确定,我使用Ninject的每个类都有"正确"顺序的构造函数.那么,有没有办法告诉Ninject不要忽略无参数构造函数,如果它不是第一个?
先感谢您.
Ninject尝试注入具有最多参数的那个(它知道如何解析*).但是,您可以明确地告诉Ninject constructor注入哪些内容:
public class Test
{
public Test(INavigationService asd)
{
// rnd stuff
}
[Inject]
public Test()
{
// other rnd stuff
}
}
Run Code Online (Sandbox Code Playgroud)
注意:您不能将Inject属性放在多个构造函数上.它会抛出异常.
更新: 这是解决这个问题的另一种方法,值得一试.
Bind<ITest>().ToMethod(x => factoryMethod());
factoryMethod 做两件事:
Kernel.CanResolve()其他方式加载还是其他方式.ctor.如果不是,请使用无参数构造函数.感觉很俗气,不确定这是否是一个好的模式.如果参数是可选的,那么更好的做法是使用属性注入(通常不赞成)或注入方法.
| 归档时间: |
|
| 查看次数: |
657 次 |
| 最近记录: |