2013-06-10 14 views
6

Uso il framework ninject. Nel mio codice ho un oggetto pigro. Posso creare un'istanza, ma quando chiamo la proprietà value ho ottenuto un'eccezione.Pigro <> Ninject Injection

private Lazy<IPsoriasisReportUserControl> psoriasisReportUserControl; 

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

ho avuto

Il tipo pigramente-inizializzato non ha un pubblico, senza parametri costruttore

eccezione perché l'iniezione non iniettare il metodo nel costruttore. Penso di dover scrivere un metodo per il bind che crea una nuova istanza.

risposta

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

Questa risposta funziona Ma puoi anche fare l'altra risposta semplicemente usando l'estensione NInject Factory. Funzionerà automaticamente. – jsgoupil

1

Hai bisogno di un costruttore pubblico predefinito su Lazy:

public Lazy() {} 
+0

c'è un costruttore senza parametri. L'iniezione non usa quello che penso. Non so come posso configurare che < – user1693057

+1

'Lazy' probabilmente si riferisce al tipo nel BCL. Avrai difficoltà a cambiarlo. –

+0

[TestMethod] UC_DiagnosticReport_How_Lazy_Works public void() { Pigro a = new Pigro (NinjectService.Get ); var b = a.Valore; Assert.IsNotNull (b); } questo funziona. Ho bisogno di questo – user1693057

Problemi correlati