Lazy<> Ninject Injection

纵然是瞬间 提交于 2019-11-27 06:57:28

问题


I use ninject framework. In my code I have a Lazy object. I can create an instance, but when I call the value property I got an exception.

 private Lazy<IPsoriasisReportUserControl> psoriasisReportUserControl;

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

I got

The lazily-initialized type does not have a public, parameterless constructor

exception because the injection does not inject the method into the constructor. I think I have to write a method to the bind what Creates a new instance.


回答1:


Use the factory extension for Ninject https://github.com/ninject/ninject.extensions.factory




回答2:


Bind(typeof (Lazy<IPsoriasisReportUserControl>)).ToMethod(
            ctx => new Lazy<IPsoriasisReportUserControl>(() =>
                  Kernel.Get<IPsoriasisReportUserControl>()));



回答3:


You need a default public constructor on Lazy :

public Lazy() {}


来源:https://stackoverflow.com/questions/17020736/lazy-ninject-injection

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!