Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part5 - Service 추가(1/2) (tistory.com)
2022.03.03 - [WPF .NET] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part4 - LayerPopup 추가
2022.03.02 - [WPF] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part3 - Busy 화면 구현
2022.02.24 - [WPF] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part2 - Frame Navigation
2022.02.21 - [WPF] - Microsoft.Toolkit.Mvvm을 이용한 간단한 프레임워크 part1
프레임워크에서 사용하는 서비스를 하나 추가하고, 사용하는 방법에 대해서 알아보겠습니다.
이 예제를 하기 위해서는 LocalDB에 Northwind database가 있어야 합니다. 이 과정은 아래 링크를 참고하시기 바랍니다.
2022.03.30 - [Visual Studio] - Visual Studio를 이용해서 Northwind database 생성하기
1. 서비스 추가
추가할 서비스는 데이터베이스를 관리하는 것으로, 단일 static 헬퍼 클래스로 만들어서 사용할 수도 있지만, Dependency Injection 기능을 이용하기 위해, Interface를 이용하는 형태로 만들겠습니다.
Interface에 대한 더 자세한 사항은 여기를 참고하시기 바랍니다.
Dependency Injection에 대한 더 자세한 사항은 여기를 참고하시기 바랍니다.
IDatabaseService.cs
기본 인터페이스로 외부에 노출할 부분만 정리
DatabaseService.cs
IDatabaseService의 구현 추상 클래스로, 단독으로 인스턴스화 시킬 수 없고, 다른 클래스의 Base 클래스로만 사용할 수 있습니다.
SqlService.cs
MS Sql 전용 서비스 클래스로, DatabaseService를 상속받아 사용합니다. 이 클래스는 생성자에서 Connection 프로퍼티와 Command 프로퍼티를 MS Sql을 이용할 수 있도록 생성하는 일만 합니다.
지금까지 인터페이스, 추상 클래스, 서비스 클래스까지 만들어 보았습니다.
이번에는 이 클래스를 실제 사용하기 위한 등록 방법을 알아 보겠습니다.
2. 서비스 등록
생성된 서비스를 애플리케이션 전체에서 사용하기 위해서는 등록을 먼저 진행해야합니다.
App.xaml.cs
connectionString 문자열은 Visual Studio에서 쉽게 확인하실 수 있으며, 아래와 다를 수 있습니다.
SQL Server Object Explorer -> (localdb)\MSSQLLocalDB 선택 -> Property 창에 Connection string 항목에서 찾을 수 있습니다.
일반적으로 서비스는 여러개의 인스턴스가 필요없기 때문에, 싱글톤으로 등록을 합니다.
IDatabaseService 인터페이스와 SqlService를 연결해서, 애플리케이션 전체에서 IDatabaseService를 Injection하면, SqlService가 반환됩니다. 이 때 IoC Container에 생성된 인스턴스가 없다면, new SqlService(connectionString)을 이용해서 만들게 됩니다.
ConfigureServices의 전체 내용입니다.
3. 서비스 사용
IoC Container에 등록된 서비스를 사용하는 가장 보편적인 방법은 생성자 주입입니다.
CustomerViewModel이 생성될 때 IDatabaseService를 injection해서 뷰모델 private readonly field에 넣어주고, 사용합니다.
그외, 사용법은 직접 호출하는 방법으로 아래와 같은 방법으로도 사용이 가능합니다.
Customer 모델에 대한 이야기와 서비스를 인터페이스로 구현한 이유에 대해서는 (2/2)에서 설명하도록 하겠습니다.