2017-11-27 4 views
1

DI에 대한 지식이 매우 제한적입니다. 솔루션의 다른 모든 곳에서 Microsoft Extension Dependency Injection이 사용 된 솔루션에서 WinForm 프로젝트를 개발 중입니다.C#의 WinForms에서 Microsoft Extension Dependency Injection 사용

내가 MainForm의 생성자에 의존 관계 (dependencies)를 전달해야

[STAThread] 
static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new MainForm()); 
} 

난에 DI를 사용하려고 : Main 메서드에서

public partial class MainForm : Form 
{ 
    public MainForm(ISomeThing someThing) 
    { 
    } 
} 

, MainForm의 인스턴스는 방법을 실행에 전달된다 서비스 제공자를 통해 Mainform 인스턴스를 인스턴스화하십시오.

private static IServiceProvider ServiceProvider { get; set; } 

여기에 객체를 보내고 다음과 같이 다음

static void ConfigureServices() 
{ 
    var services = new ServiceCollection(); 
    services.AddTransient<ISomeThing, SomeThing>(); 
    ServiceProvider = services.BuildServiceProvider(); 
} 

그리고 ConfigureServices() 전화를 Main()에 다음과 같이

static void Main() 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    ConfigureServices(); 
    Application.Run(ServiceProvider.GetService(MainForm)); 
} 

을 그러나, 나는 컴파일 오류가 발생합니다 : "MainForm이 유효하지 않은 유형이다 주어진 상황 "

에 나는 SimpleInjector 또는 Unity 를 사용하여 유사한 접근 방식을 사용하는 다음 링크를 발견하지만 N 할 이 종류의 DI로 이것을 어떻게 사용하는지 알고 있습니까? 아니면 다른 DI를 사용해야합니까?

감사

답변

1

당신은 그 클래스에 해당하는 System.Type 인스턴스를 얻으려고 노력하고 있습니다. typeof() 키워드가하는 일입니다

: 당신은 또한 Form에 결과를 캐스팅해야합니다

GetService(typeof(MainForm)) 

참고.

+0

감사합니다. 나는 당신의 제안에 따라 이것을 사용했다. var form = (MainForm) ServiceProvider.GetService (typeof (MainForm)); Application.Run (form); 그러나 양식 객체는 null입니다. 제발 할 수 있습니다 –

+0

@AminMerati : 당신의 ServiceProvider에 추가해야합니다. – SLaks

+0

도움을 주셔서 감사합니다, 지금 일했습니다! –