2014-03-04 3 views
0

를 주입 Ninject에 나는 모델내가 Ninject에 사용하고 모델 asp.net MVC

내가 IPNConBut를 구현 내 ConBut 클래스와 IPNConBut를 주입 할
public class TCFormModel 
{ 
    public string Name { get; set; } 
    public IPNConBut pConBut { get; set; } 
} 

다음 내 model.I의 속성이 주입합니다.

public class ConBut : IPNConBut { ... } 

어떻게하면됩니까?

LATER 편집 - MORE INFO :

내 모델 바인더에 사용하고 TCFormModel의 인스턴스를 만들려고 할 때 실패합니다. 그것은 의미가 있지만 어떻게 이것을 피할 수 있습니까? 하나는 매개 변수가없는 하나는 바인딩 매개 변수가있는 두 개의 생성자로 시도했습니다. 나는 또한 속성에서 그리고 심지어 생성자에서 [Inject]를 시도했고 나는 같은 결과를 얻었다. 생성자는 사용되지 않습니다.

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; 
    } 
} 

공장 인터페이스 :

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

을 그리고 : O를 참조 https://github.com/ninject/ninject/wiki

업데이트 :

나는 https://github.com/ninject/ninject.extensions.factory 확장자를 사용하는 것이 좋습니다.

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

을 그리고, TCFormModelBinderIPNConButFactory를 주입하고 인스턴스를 생성하는 데 사용

는 다음과 같이 팩토리 인터페이스 바인딩

. 모델은 생성자 주입의 경우에는 하나의 생성자 만 필요하며, 속성 주입의 경우에는 생성자 없음 (= 디폴트 ctor)이 필요합니다.

저는 asp.net MVC에 익숙하지 않아서 당신이 액트볼을 TCFormModelBinder에 주입 할 수 있는지 확신 할 수 없지만 그렇게 추측합니다. 어쨌든, 할 수 없다면, 어떻게 든 IKernel에 액세스하여 거기에서 팩토리를 검색해야합니다.

+0

예, 문제는'new TCFormModel()'과 같은 새 모델을 만들면 매개 변수가 필요하므로 아무것도 보낼 수 없다는 것입니다. 이 경우 어떻게해야합니까? 이건 내 문제를 해결하지 못합니다. 그것은 IPNConBut 매개 변수가 무엇인지 알지 못합니다. – tzortzik

+0

나는 Factory와 함께 시도해 보았지만 작동시키지 못했다. – tzortzik

+0

내 게시물을 업데이트했습니다. – tzortzik