2010-08-24 8 views
9

나는 다음 코드를 사용하여 윈폼 응용 프로그램을 가지고 null로 메서드는 내가 기대하는 적절한 개체입니다. 나중에 형태로 Ninject에 속성 주입 반환

, 나는 재산 주입을 사용하고 있습니다 :
[Inject] 
TestInterface test {get;set;} 

그리고 양식이로드되면, test 작업을 시도하지만 null 객체의

.

생각하십니까?

답변

3

IKernel 인스턴스에서 Inject()를 호출하고 양식의 인스턴스를 전달했는지 확인하십시오. 이렇게하면 모든 종속성이 제대로 주입되도록 할 수 있습니다.

var form = Kernel.Get<MainForm>() 
: 예를 들어 ...
[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

감사 케빈, 그것은 문제를 해결,하지만 난 더 나은 솔루션 후에 생각 해요. 많은 DI가 "나쁜 냄새"에 대해 계속 읽었습니다. DI가 아니기 때문에 전화를받습니다. 저는 객체를 인스턴스화 할 때마다 생성자 주입이 방해가되는 것처럼 보이는 속성 주입을 시도하고 있습니다. 커널의 인스턴스도 거꾸로 보입니까? – mattdwen

+1

동의합니다 - 커널의 인스턴스를 의존성을 많이 전달하는 것처럼 거의 전달하지 않는 것입니까? –

+0

ASP.NET에서 DI를 얻을 수있는 방법을 잘 모르겠습니다 ... 파이프 라인에 연결하여 종속성을 주입 할 수있는 곳이 너무 많습니다. –

3

대신

당신이하고 싶은

var form = new MainForm() 

...

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

....

을하고

이것은 명시 적 주입의 필요성을 없애줍니다 (그리고 생성자 주입을 가능하게합니다). 내가 Ninject에 대한 윈폼 (또는 WPF) 샘플의 잘 모릅니다

-

도 참조 (하지만 물어 및/또는에 현상금 스틱 좋은 질문이 될 것 IIRC 하나는 최근에 와서) :

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

What is the best practice for WinForms dialogs with ninject?

관련 문제