给定Ninja类,在Ninject内核中具有指定的绑定,我可以解析一个这样做的对象:
var ninja = ninject.Get<Ninja>();
但是我为什么不能这样做:
Type ninjaType = typeof(Ninja);
var ninja = ninject.Get<ninjaType>();
在Get调用之外指定类型的正确方法是什么?
最佳答案
指定类型参数不是运行时的事情,它是静态编译的。该类型必须在编译时知道。在您的方案中,它可能是未知的,或在运行时计算的。通过反思,可以在指定类型参数的地方构造一个方法调用,但是您不太可能想要这样做。
此外,大多数容器都应该具有如下所示的重载:
Type ninjaType = typeof(Ninja);
var ninja = (Ninja)ninject.Get(ninjaType);
最后,大多数容器应提供在容器配置中指定的方式,在某些条件下应提供哪种类型。我知道Ninject有一个漂亮的DSL,可以有条件地指定在什么情况下应该返回哪种类型。但是,这意味着要针对抽象进行编码,然后让容器决定返回的内容:
class DependencyConsumer {
ctor(IWarrior warrior) {
//Warrior could be a ninja, because e.g. you told NInject
//that the dependency should be filled that way for this class
}
}
关于c# - 通过Ninject解析对象时指定类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2620600/