2013-06-10 4 views
6

Ben yapıyorum çerçeve. Benim kodumda Lazy objem var. Bir örnek oluşturabilirim, ama değer özelliğini çağırdığımda bir istisna aldım. Tembel Enjeksiyon

private Lazy<IPsoriasisReportUserControl> psoriasisReportUserControl; 

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

Ben enjeksiyon yapıcı içine yöntemini enjekte değil çünkü bir halkı, parametresiz

istisna yapıcı yok

tembel-başlatıldı tip

aldık. Yeni bir örnek oluşturur ne bağlamak için bir yöntem yazmak zorunda düşünüyorum.

cevap

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

Bu cevap çalışır var. Ama aynı zamanda NInject Extension fabrikasını kullanarak diğer cevabı da yapabilirsiniz, otomatik olarak çalışacaktır. – jsgoupil

1

Sen Lazy üzerinde varsayılan ortak oluşturucusu gerekir:

public Lazy() {} 
+0

için fabrika uzantısını kullanın. Enjeksiyon sanırım kullanmıyor. Bunu nasıl yapılandırabileceğimi bilmiyorum < – user1693057

+1

"Lazy" muhtemelen BCL'deki türden bahseder. Değiştirmek için zorlanacaksınız. –

+0

[Test metodu] public void UC_DiagnosticReport_How_Lazy_Works() { Tembel a = new Lazy (NinjectService.Get ); var b = a.Value; Assert.IsNotNull (b); } bu çalışma. Bu – user1693057