2014-03-04 131 views
0

我使用Ninject,我想注入我model.I的屬性有以下型號Ninject注入模型asp.net MVC

public class TCFormModel 
{ 
    public string Name { get; set; } 
    public IPNConBut pConBut { get; set; } 
} 

我想用我的ConBut類,它實現IPNConBut注入IPNConBut

public class ConBut : IPNConBut { ... } 

我該怎麼做?

以後編輯 - 更多信息:

我的模型在使用的粘合劑,當它試圖創建TCFormModel的實例失敗。這是有道理的,但如何避免這種情況?我嘗試了兩個構造函數,一個是無參數的,另一個是綁定參數。我也嘗試過[注入]屬性,甚至在構造函數上,我也得到了相同的結果。構造函數從不使用。

public class TCFormModelBinder : IModelBinder 
{ 
    private const string sessionKey = "TCFM_Model"; 

    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     TCFormModel model = null; 
     if (controllerContext.HttpContext.Session != null) 
     { 
      model = (TCFormModel)controllerContext.HttpContext.Session[sessionKey]; 
     } 

     if (model == null) 
     { 
      model = new TCFormModel(); 
      if (controllerContext.HttpContext.Session != null) 
      { 
       controllerContext.HttpContext.Session[sessionKey] = model; 
      } 
     } 
     return model; 
    } 
} 

Factory接口:

public interface IPNConButFactory 
{ 
    IPNConBut Create(); 
} 

回答

1

您可以我們構造器注入:

public class TCFormModel 
{ 
    public TCFormModle(IPNConBut pConBut) { 
     this.pConBut = pConBut; 
    } 

    public string Name { get; set; } 
    public IPNConBut pConBut { get; set; } 
} 

(通常推薦) 或財產注射:

public class TCFormModel 
{ 
    public string Name { get; set; } 

    [Inject] 
    public IPNConBut pConBut { get; set; } 
} 

阿爾斯且看: https://github.com/ninject/ninject/wiki/Injection-Patterns

而且一般維基:https://github.com/ninject/ninject/wiki

更新:

我建議使用https://github.com/ninject/ninject.extensions.factory擴展。

綁定你的工廠界面如下:

IBindingRoot.Bind<IPNConButFactory>().ToFactory(); 

然後,在TCFormModelBinder注入IPNConButFactory,並用它來創建一個實例。在構造函數注入的情況下,模型只需要一個構造函數,或者在注入屬性的情況下不需要(默認ctor)。

我不熟悉asp.net MVC,所以我不確定你是否可以真的注入TCFormModelBinder,但我會這樣猜測。無論如何,如果你不能,你需要以某種方式訪問​​IKernel並從那裏檢索工廠。

+0

是的,但問題是,如果我創建一個新的模型,像'new TCFormModel()'它將需要一個參數,我不能發送任何東西。在這種情況下我該怎麼辦?這並不能解決我的問題。它會說不知道什麼是IPNConBut參數。 – tzortzik

+0

我甚至嘗試過工廠,但我無法得到它的工作。 – tzortzik

+0

我更新了我的帖子。 – tzortzik