如何实现以下目标?
Kernel.Bind(typeof(SomeType<>)).ToConstant(null);
这行代码将失败,因为编译器无法从使用中推断null
类型。由于我使用的是开放泛型类型,因此我无法将其作为通用参数传递。
有办法解决这个问题吗?
答案 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返回 空。
所以不,如果你想使用一个常量值,它需要是一个非空值才能成功解析。