728x90
https://www.youtube.com/watch?v=DxibckiPDw0&list=PLlrfTSXS0LLKHfOfwM31jJw3SHuDnkF49&index=3
📌 의존성 주입 세팅
public App()
{
Services = ConfigureServices();
this.InitializeComponent();
}
/// <summary>
/// Gets the current <see cref="App"/> instance in use
/// </summary>
public new static App Current => (App)Application.Current;
/// <summary>
/// Gets the <see cref="IServiceProvider"/> instance to resolve application services.
/// </summary>
public IServiceProvider Services { get; }
/// <summary>
/// Configures the services for the application.
/// </summary>
private static IServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
services.AddSingleton<IFilesService, FilesService>();
services.AddSingleton<ISettingsService, SettingsService>();
services.AddSingleton<IClipboardService, ClipboardService>();
services.AddSingleton<IShareService, ShareService>();
services.AddSingleton<IEmailService, EmailService>();
return services.BuildServiceProvider();
}
위 코드를 복사해서 App.xaml에 붙여넣기 해 준다.
📌 서비스 생성
namespace seungjjangTalk.Services
{
internal class TestService
{
public string GetString()
{
return "카톡입니다.";
}
}
}
- ITestService.cs
namespace seungjjangTalk.Services
{
public interface ITestService
{
string GetString();
}
}
- TestService.cs
namespace seungjjangTalk.Services
{
internal class TestService : ITestService
{
public string GetString()
{
return "카톡입니다";
}
}
}
- mainWindow.xaml
namespace seungjjangTalk
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
ITestService service = new TestService();
MessageBox.Show(service.GetString());
}
}
}
◾ 의존성 주입
- AddSingleton : 한 번 생성하면 그 객체는 끝날 때 까지 사용
- App.xaml
private static IServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
//Singleton으로 선언하여 TestService 객체를 ITestService 인터페이스로 주입하겠다라는
//서비스를 주입
//의존성을 주입하면 main에서 생성자에서 불러 올 수 있다.
services.AddSingleton<ITestService, TestService>();
return services.BuildServiceProvider();
}
◾ 의존성을 주입한 뒤 main에서 생성자로 불러오기
- MainWindow.xaml.cs
public partial class MainWindow : Window
{
//생성자 생성
public MainWindow(ITestService testService)
{
InitializeComponent();
//getString으로 불러오기
MessageBox.Show(testService.GetString());
//ITestService service = new TestService();
//MessageBox.Show(service.GetString());
}
◾ 생성자 생성
- App.xaml에서 StartupUri 삭제
- App.xaml.cs에서 비하인드 코드로 작성
public App()
{
Services = ConfigureServices();
Startup += App_Startup;
}
private void App_Startup(object sender, StartupEventArgs e)
{
var mainView = new MainWindow();
}
- 여기서 매개변수를 생성하면 의존성 주입의 의미가 사라지기 때문에 생성자 주입이라는 것을 지원함
◾ 생성자 주입
App.Current.Services.GetService<IFileLogger>(); 생성자 주입 구문을 복사하여 사용
- App.xaml.cs
public App()
{
Services = ConfigureServices();
Startup += App_Startup;
}
private void App_Startup(object sender, StartupEventArgs e)
{
var mainView = App.Current.Services.GetService<MainWindow>();
mainView.Show();
}
- 생성자 주입 구문을 사용하면 생성자의 매개변수를 입력하지 않아도 객체가 만들어지고 호출이된다.
- 단, 이것도 서비스에 등록이 되어야 사용이 가능하다.
- App.xaml.cs
private static IServiceProvider ConfigureServices()
{
var services = new ServiceCollection();
//Services
/*Singleton으로 선언하여 TestService 객체를 ITestService 인터페이스로 주입하겠다라는
서비스를 주입
의존성을 주입하면 main에서 생성자에서 불러 올 수 있다.*/
services.AddSingleton<ITestService, TestService>();
//Views
/* 의존성이 추가 된 MainWindow를 만들어준다. */
services.AddSingleton<MainWindow>();
return services.BuildServiceProvider();
}
- App.xaml.cs
- services.AddSingleton<MainWindow>(); : 의존성이 주입이 된 MainWindow를 만들게된다
- var mainView = App.Current.Services.GetService<MainWindow>(); 에서 객체를 생성 할 때 생성자의 매개변수에 넣을 수 있다.
- public MainWindow(ITestService testService) : 이 매개변수가 호출되면서 서비스가 실행된다.
📌 정리
- 의존성 주입을 하면 매번 객체를 생성하지 않고 서비스에서 등록을 한 객체를 생성자의 매개변수로써 불러오게되면 간단하게 사용 할 수 있다.
728x90
'C# > C# 프로그래밍' 카테고리의 다른 글
[C#프로그래밍] [WPF] PC 카카오톡 만들기 #04 - DataTemplate로 UserControl 변경하기 (0) | 2023.08.22 |
---|---|
[C#프로그래밍] [WPF] PC 카카오톡 만들기 #03 - 타이틀 바 만들기 (0) | 2023.08.10 |
[C#프로그래밍] [WPF] PC 카카오톡 만들기 #01 - 프로젝트 생성 및 NuGet 패키지 다운 (0) | 2023.08.10 |
[C#프로그래밍] 계산기만들기 #02 (0) | 2023.08.09 |
[C#프로그래밍] 계산기만들기 #01 (0) | 2023.08.09 |