gpt4 book ai didi

c# - 通过 Ninject 解析对象时指定类型

转载 作者:太空宇宙 更新时间:2023-11-03 22:22:23 24 4
gpt4 key购买 nike

给定 Ninja 类,在 Ninject 内核中使用指定的绑定(bind),我可以解析一个这样做的对象:

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com