7 분 소요

1. Microsoft.Toolkit.Mvvm.DependenctInjection

  • ViewModel 생성자에 대한 매개변수로 서비스를 전달 할 때 종속성 주입(Dependency Injection을 사용한다.

    종속성 주입(Dependency Injection) : 외부에서 두 객체 간의 관계를 결정해 주는 디자인

  • 추상화 한 서비스를 필요한 곳에 주입하여 백엔드 코드에서 쉽게 사용할 수 있다.
  • Mvvm Toolkit에서는 Ioc 구현을 위한 API를 제공하지 않는다. (아래의 두 패키지를 NuGet에서 다운받아 사용한다.)
    • Microsoft.Extensions.DependencyInjection
    • Microsoft.Extensions.DepencencyInjection.Abstractions


2. 사용 방법

1. 프로그램 진입점에 선언 부분

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Toolkit.Mvvm.DependencyInjection;

public static IServiceProvider serviceProvider;
// 프로그램 초기화 부분
{
  serviceProvider = ConfigureServides();
  // 종속성을 관리해주는 Ioc에 사용할 클래스 들을 등록해준다.
  Ioc.Default.ConfigureServices(serviceProvider);
}

// ConfigureServices 구현
private static IServiceProvider ConfigureServides()
{
  var services = new ServiceCollection();
  // View, ViewModel, Model, App Context, Serveice 등록
  // ...
  return services.BuildServiceProvider(validateScopes: true);
}
  • ConfigureServices에 사용하는 클래스를 선언한다. 이때, 서비스 수명을 고려하여 사용의도에 맞게 선언한다.
    1. Transient : 서비스 컨테이너에서 요청할 때 마다 생성
    2. Scoped : 범위를 지정할 때 마다 만들어짐 (범위 안에서는 유일)
    3. Singletion : 처음 요청될 때 생성 후, 동일한 인스턴스 사용


2. 종속성 주입 부분

public class TestClass1
{
  public TestClass1() {}
  // ...
}

// TestClass2는 TestClass1에 종속되어있다.
public class TestClass2
{
  private TestClass1 _testclass1;
  // 참조 할 클래스를 생성자에서 매개변수로 받아준다.
  public TestClass2(TestClass1 testclass1) 
  {
    this._testclass1 = testclass1;
    // ...
  }
  // ...
}


3. TestClass2 생성하기

using Microsoft.Toolkit.Mvvm.DependencyInjection;
// TestClass 인스턴스 생성
  TestClass2 tc2 = Ioc.Default.GetService<TestClass2>();
  • 생성 전, ConfigureServides에 클래스 등록을 해야 오류가 나지 않는다.


📑. 참고

댓글남기기