【问题标题】:How to bind open generic to a null constant?如何将开放泛型绑定到空常量?
【发布时间】:2023-04-01 14:03:01
【问题描述】:

我怎样才能实现以下目标?

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

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

有没有办法解决这个问题?

【问题讨论】:

  • 为什么需要这个?将null 作为依赖注入不是一个好方法。考虑使用空对象模式。

标签: c# dependency-injection ninject


【解决方案1】:

虽然我看不出这样做的原因,特别是因为我真诚地怀疑 ninject 是否知道如何解决它,但您可以创建一个空实例并直接绑定到它。

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

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 返回 空。

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

【讨论】:

    猜你喜欢
    • 2011-10-08
    • 2013-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多