나는 다음 코드를 사용하여 윈폼 응용 프로그램을 가지고 null로 메서드는 내가 기대하는 적절한 개체입니다. 나중에 형태로 Ninject에 속성 주입 반환
, 나는 재산 주입을 사용하고 있습니다 :[Inject]
TestInterface test {get;set;}
그리고 양식이로드되면, test
작업을 시도하지만 null 객체의
생각하십니까?
나는 다음 코드를 사용하여 윈폼 응용 프로그램을 가지고 null로 메서드는 내가 기대하는 적절한 개체입니다. 나중에 형태로 Ninject에 속성 주입 반환
, 나는 재산 주입을 사용하고 있습니다 :[Inject]
TestInterface test {get;set;}
그리고 양식이로드되면, test
작업을 시도하지만 null 객체의
생각하십니까?
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
}
대신
당신이하고 싶은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?
감사 케빈, 그것은 문제를 해결,하지만 난 더 나은 솔루션 후에 생각 해요. 많은 DI가 "나쁜 냄새"에 대해 계속 읽었습니다. DI가 아니기 때문에 전화를받습니다. 저는 객체를 인스턴스화 할 때마다 생성자 주입이 방해가되는 것처럼 보이는 속성 주입을 시도하고 있습니다. 커널의 인스턴스도 거꾸로 보입니까? – mattdwen
동의합니다 - 커널의 인스턴스를 의존성을 많이 전달하는 것처럼 거의 전달하지 않는 것입니까? –
ASP.NET에서 DI를 얻을 수있는 방법을 잘 모르겠습니다 ... 파이프 라인에 연결하여 종속성을 주입 할 수있는 곳이 너무 많습니다. –