2010-08-24 20 views
9

Aşağıdaki kod ile bir WinForms uygulaması var boş değerle yöntem beklediğim doğru nesnedir. Daha sonra bir formda Ninject mülkiyet enjeksiyon döner

, ben mülkiyet enjeksiyonu kullanıyorum:
[Inject] 
TestInterface test {get;set;} 

Ve formu yüklendikten sonra test birlikte çalışarak, ancak boş bir nesne

.

Düşünceler?

cevap

3

IKernel örneğinde Inject() öğesini çağırdığınızdan emin olun ve formunuzun bir örneğini iletin. Bu, tüm bağımlılıkların uygun şekilde enjekte edilmesini sağlayacaktır.

var form = Kernel.Get<MainForm>() 
: Örneğin ...
[Inject] 
TestInterface Test { get; set; } 

private void Form_Load(object sender, EventArgs e) 
{    
    IKernel kernel = ... // Get an instance of IKernel 
    kernel.Inject(this); 

    // Your form dependencies have now been injected and the 
    // Test property is ready to use 
} 
+4

Teşekkür Kevin, sorunu giderip, ama ben daha iyi bir çözüm peşinde olduğumu düşünüyorum. Pek çok enjeksiyonun "kötü kokusu" hakkında okumaya devam ediyorum ve aramaları doğru değil. Mülk enjeksiyonu, bir nesneyi her açtığımda böyle görünecek gibi, mülk enjeksiyonu deniyorum. Çekirdeğin bir örneğine sahip olmak da geriye doğru görünüyor mu? – mattdwen

+1

Katılıyorum - çekirdeğin bir örneğini, etraftaki bir grup bağımlılığı geçmek kadar kötü değil mi? –

+0

ASP.NET'te başka nasıl DI başarılabileceğinden emin değilim ... boru hattına takıp bağımlılıklarınızı enjekte edebileceğiniz çok fazla yer var. –

3

yerine

Sen yapmak istediğim

var form = new MainForm() 

...

class MainForm 
{ 
    MainForm() 
    { 
     GlobalKernel.Inject(this) 

....

yapıyor

Açık Enject'e olan ihtiyacı ortadan kaldırır (ve yapıcı enjeksiyonu yapmanıza izin verir). Ben Ninject için herhangi WinForms (veya WPF) numunelerin bilmiyorum

-

Ayrıca bkz (ama sormak ve/veya bir ödül sopa iyi bir soru olurdu IIRC biri geçenlerde geldi):

IoC/DI framworks with Smart Client Winform apps: How should I approach this?

What is the best practice for WinForms dialogs with ninject?