2012-11-20 99 views
4

我有一個類,它包含我的行動(任何邏輯):不瞭解ninject和注射

public class socActions 
{ 
    public void Choose(int elem) 
    { 
     switch(elem) ... CalcA(elem) || CalcB(elem) ... 
    } 
    public void CalcA() 
    { 

    } 
    public void CalcB() 
    { 

    } 
    public void CalcC() 
    { 

    } 
} 

所以,在我的程序,當我得到ELEM值,我用它喜歡:

(new socActions()).Choose(elem_val); 

Okey,但是在socActions類方法中,我希望與我的存儲庫建立連接或進行任何其他依賴注入。

  1. 如果我添加IRepositoryMy repositoryMy到構造函數,那麼我不能 創建類如上,與參數 IRepositoryMy現在BCZ它需要構造函數。
  2. 如果我嘗試在現場進行注射,它不起作用 (property = null)。
  3. 如果我嘗試在方法中進行注射(CalcA, CalcB),它也不起作用。

我真的應該如何做這個任務(注入類,例如存儲庫)?不想慶祝一切都在我的應用程序爲靜態:(

的WinForms,C#,Ninject 3

編輯:

public class socActions 
{ 
    [Inject] 
    public IGridProcessor _GridProcessor { private get; set; } 

所以,在方法其空:

public void UpdateInfo(...) 
{     
    ... 
    this._GridProcessor.Refresh(); 
} 

在其他類中,我將IGridProcessor注入構造函數的類中,一切正常。 在Program.cs中:

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 

     var kernel = new StandardKernel(new TwttModule()); 
     var form = kernel.Get<Main>(); 

     Application.Run(form); 
    } 

    public class TwttModule : NinjectModule 
    { 
     public override void Load() 
     { 
      Bind<IGridProcessor>().To<GridProcessor>(); 
     } 
    } 

    public static class AnyClass 
    { 
     public static void Act() 
     { 
      .... 
      (new socActions()).Choose(elem_val); 
     } 
    } 

我應該如何將IGridProcessor注入到socActions中?

+0

我們展示您的ninject代碼請,這是至關重要的一點 –

+0

類你在哪裏選擇根據傳入的值採取什麼行動似乎是一種代碼味道。你可能應該有一個基類或接口和幾個實現差異的類。 – Oded

+0

仍然無法理解我該怎麼做,我可以注入現場? – user1612334

回答

0

使用構造函數注入時,不要直接構造類,而是要求ninject提供實例。基於你如何配置ninject,你會得到一個新的實例,或單一實例等

從自己的文件:

Samurai warrior = kernel.Get<Samurai>(); 
+0

那麼,我應該如何注入我的案例? – user1612334

+0

Ninject會注入,你只是要求它的構造函數,整個注入點不再是你的注意。 – Aphelion

+0

你建議我創建靜態內核嗎? – user1612334