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

C# 通过Ninject解析对象时指定类型,c#,.net,ioc-container,ninject,C#,.net,Ioc Container,Ninject,给定Ninja类,通过Ninject内核中的指定绑定,我可以解析这样一个对象: var ninja = ninject.Get<Ninja>(); var ninja=ninject.Get(); 但为什么我不能这样做: Type ninjaType = typeof(Ninja); var ninja = ninject.Get<ninjaType>(); Type ninjaType=typeof(忍者); var ninja=ninject.Get();

给定Ninja类,通过Ninject内核中的指定绑定,我可以解析这样一个对象:

var ninja = ninject.Get<Ninja>();
var ninja=ninject.Get();
但为什么我不能这样做:

Type ninjaType = typeof(Ninja); 
var ninja = ninject.Get<ninjaType>();
Type ninjaType=typeof(忍者);
var ninja=ninject.Get();

在要获取的调用之外指定类型的正确方法是什么

因为T的目的是指定所需的类型。Ninject接收您的类型T并代表您调用类型(T)。我认为这样你的代码就更短了。你不这么认为吗?

因为t的目的是指定你想要的类型。Ninject接收您的类型T并代表您调用类型(T)。我认为这样你的代码就更短了。您不认为吗?

指定类型参数不是运行时的事情,而是静态编译的。类型必须在编译时已知。在您的场景中,它可能是未知的,或者是在运行时计算的。通过反射,可以在指定类型参数的地方构造方法调用,但不太可能希望这样做

此外,大多数容器应具有类似以下内容的过载:

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
  }
}

指定类型参数不是运行时的事情,而是静态编译的。类型必须在编译时已知。在您的场景中,它可能是未知的,或者是在运行时计算的。通过反射,可以在指定类型参数的地方构造方法调用,但不太可能希望这样做

此外,大多数容器应具有类似以下内容的过载:

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
  }
}

听起来很合理。我有一个需要接收类型的函数-它应该接收模板样式吗?-1er:不知道我是否会对此进行投票,但我认为它实际上是正确的,并不是没有帮助的。因此,a+1可以在注释中不加理由地执行a-1。像这样分散-1只给海报+8,否则可能不会发生。听起来很合理。我有一个需要接收类型的函数-它应该接收模板样式吗?-1er:不知道我是否会对此进行投票,但我认为它实际上是正确的,并不是没有帮助的。因此,a+1可以在注释中不加理由地执行a-1。像这样分散-1只给海报+8,否则可能不会发生。否决票是怎么回事?我的问题是不清楚还是太愚蠢了?如果是由删除被否决的答案的人;不是我给了你那一票否决票..我对你的评论也是。向上投票。我不确定我是否一定会在没有这些废话的情况下投赞成票,但这是一个不重复、措辞恰当的问题,那么+1投反对票是怎么回事?我的问题是不清楚还是太愚蠢了?如果是由删除被否决的答案的人;不是我给了你那一票否决票..我对你的评论也是。向上投票。我不确定我是否一定会在没有这些废话的情况下对它进行投票,但这是一个不重复的措辞很好的问题,所以+1