C#
[C#]의존성 주입 예시
수학소년
2024. 2. 21. 01:26
1. WPF Application 만들기
.NET 8.0(Long Term)으로.
2. Service만들기
Services폴더 만들고,
using System.Diagnostics;
namespace WpfApp3.Services
{
public interface IUserService
{
public void Test();
}
public class UserService : IUserService
{
public void Test()
{
Debug.WriteLine("UserService.Test()");
}
}
}
3. App.xaml.cs 수정
Microsoft.Extensions.DependencyInjection 를 사용하려면
Microsoft.Extensions.DependencyInjection 의존성 추가
using Microsoft.Extensions.DependencyInjection;
using System.Diagnostics;
using System.Windows;
using WpfApp3.Services;
namespace WpfApp3
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
public IServiceProvider ServiceProvider { get; set; }
public App()
{
ServiceProvider = ConfigureServices();
}
private static IServiceProvider? ConfigureServices()
{
Debug.WriteLine("ooooooooooooo");
var services = new ServiceCollection();
services.AddSingleton<IUserService, UserService>();
return services.BuildServiceProvider();
}
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
IUserService userService = ServiceProvider.GetService<IUserService>();
userService.Test();
}
}
}
App생성자가 호출되면서 ConfigureService가 호출되고,
ServiceProvider에 UserService를 추가
그 후에 OnStartup 호출
(OnStartup을 호출시키려면, App.xaml에 StartupUri를 제거)
그러면서 UserService.Test호출
4. Service에서 Service호출
또 다른 Service를 만들고 거기서 UserService.Test를 호출해보자
만들 Service는 UserService를 주입받는다
using System.Diagnostics;
namespace WpfApp3.Services
{
public interface IOtherService
{
public void Test();
}
public class OtherService : IOtherService
{
public void Test()
{
Debug.WriteLine("OtherService.Test()");
}
}
}
using System.Diagnostics;
namespace WpfApp3.Services
{
public interface IUserService
{
public void Test();
}
public class UserService : IUserService
{
private IOtherService _otherService;
public UserService(IOtherService otherService)
{
_otherService = otherService;
}
public void Test()
{
Debug.WriteLine("UserService.Test()");
_otherService.Test();
}
}
}
IOtherService가 ServiceProvider에 있어야 UserService생성자에서 주입받을 수 있다
ServiceProvider에 추가해주자
// App.xaml.cs
private static IServiceProvider? ConfigureServices()
{
var services = new ServiceCollection();
services.AddSingleton<IUserService, UserService>();
services.AddSingleton<IOtherService, OtherService>(); // <-- 추가
return services.BuildServiceProvider();
}