Lajos
Lajos

Reputation: 2827

Lazy<> Ninject Injection

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.

Upvotes: 8

Views: 4771

Answers (3)

Lajos
Lajos

Reputation: 2827

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

Upvotes: 9

Remo Gloor
Remo Gloor

Reputation: 32725

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

Upvotes: 13

Joffrey Kern
Joffrey Kern

Reputation: 6499

You need a default public constructor on Lazy :

public Lazy() {}

Upvotes: 1

Related Questions