2013-06-10 8 views
6

Ich benutze ninject Rahmen. In meinem Code habe ich ein Lazy-Objekt. Ich kann eine Instanz erstellen, aber wenn ich die value -Eigenschaft aufruft, habe ich eine Ausnahme bekommen.Faule <> Ninject Injection

private Lazy<IPsoriasisReportUserControl> psoriasisReportUserControl; 

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

Ich habe

Der träge initialisierte Typ kein öffentliches hat, parameterlos Konstruktor

Ausnahme, da die Injektion nicht die Methode in den Konstruktor nicht injizieren. Ich denke, ich muss eine Methode auf die Bindung schreiben, die eine neue Instanz erstellt.

Antwort

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

Diese Antwort funktioniert Sie können aber auch die andere Antwort machen, indem Sie einfach die NInject Extension Factory verwenden, die automatisch funktioniert. – jsgoupil

1

Sie benötigen einen Standard öffentlichen Konstruktor zum Lazy:

public Lazy() {} 
+0

es einen parameterlosen Konstruktor ist. Die Injektion benutzt das nicht, denke ich. Weiß nicht wie ich das konfigurieren kann < – user1693057

+1

'Lazy' verweist wahrscheinlich auf den Typ in der BCL. Sie werden es schwer haben, es zu ändern. –

+0

[Testmethod] public void UC_DiagnosticReport_How_Lazy_Works() { Faule a = new Faule (NinjectService.Get ); var b = a.Wert; Assert.IsNotNull (b); } das funktioniert. Ich brauche dies – user1693057