如何将open generic绑定到null常量?

时间:2016-01-12 16:37:23

标签: c# dependency-injection ninject

如何实现以下目标?

Kernel.Bind(typeof(SomeType<>)).ToConstant(null);

这行代码将失败,因为编译器无法从使用中推断null类型。由于我使用的是开放泛型类型,因此我无法将其作为通用参数传递。

有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

虽然我没有看到这样做的原因,特别是因为我真诚地怀疑ninject会知道如何解决它,你可以创建一个null实例并直接绑定它。

以下编译,但它不会在运行时执行您想要的操作:

var kernel = new StandardKernel();

SomeType<int> constant = null;
kernel.Bind(typeof(SomeType<>)).ToConstant(constant);

public class SomeType<T>{ }

它实际上会抛出一个类似于以下内容的ActivationContext错误:

  

ActivationException:使用时激活SomeType {int}时出错   从SomeType {T}绑定到常量值Provider返回   空。

所以不,如果你想使用一个常量值,它需要是一个非空值才能成功解析。