如何将开放泛型绑定到null常量

本文关键字:绑定 null 常量 泛型 | 更新日期: 2023-09-27 18:30:03

如何实现以下目标?

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

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

有办法解决这个问题吗?

如何将开放泛型绑定到null常量

尽管我看不出这样做的原因,特别是因为我真诚地怀疑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}到常量值的绑定返回提供程序无效的

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