8

我使用ninject框架。在我的代码中,我有一个 Lazy 对象。我可以创建一个实例,但是当我调用 value 属性时出现异常。

 private Lazy<IPsoriasisReportUserControl> psoriasisReportUserControl;

[Inject]
    public Lazy<IPsoriasisReportUserControl> PsoriasisReportUserControl
    {
        get { return psoriasisReportUserControl; }
        set { psoriasisReportUserControl = value; }
    }

我有

延迟初始化的类型没有公共的、无参数的构造函数

异常,因为注入没有将方法注入构造函数。我想我必须编写一个方法来绑定什么创建一个新实例。

4

3 回答 3

13

使用 Ninject 的工厂扩展https://github.com/ninject/ninject.extensions.factory

于 2013-06-12T15:52:42.067 回答
9
Bind(typeof (Lazy<IPsoriasisReportUserControl>)).ToMethod(
            ctx => new Lazy<IPsoriasisReportUserControl>(() =>
                  Kernel.Get<IPsoriasisReportUserControl>()));
于 2013-06-10T10:40:02.500 回答
1

您需要 Lazy 上的默认公共构造函数:

public Lazy() {}
于 2013-06-10T09:37:18.427 回答