์ง๊ธ๊น์ง IoC Container๋ฅผ ์ฐ๊ธฐ ์์ํ ๋ค๋ก ์ญ Microsoft.Extensions.DependencyInjection์ ์ฌ์ฉํ์ต๋๋ค.
ํ์ง๋ง ์ด๊ฒ์ WPF๋ Windows Forms ์จ๋ณด์ ๋ถ๋ค์ ์์คํ
๋ฐ AddScoped()๋ฅผ ํ์ฉํ๊ธฐ๊ฐ ํ๋ญ๋๋ค. ์ด๊ฒ์ ์ ์ด์ Microsoft.Extensions.DependencyInjection๊ฐ aspnetcore๋ฅผ ์ผ๋ํ๊ณ ๋ง๋ค์ด์ก๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ณ ์์ต๋๋ค.
aspnetcore์์ AddScoped๋ฅผ ์ฌ์ฉํ๋ฉด web session ๋จ์๋ก ์ธ์คํด์ค๋ฅผ ๊ด๋ฆฌํ ์ ์๊ณ , ๊ทธ๋ฅ ์ฐ๊ฒ ๋๋ค๋ฉด ์๋์ฒ๋ผ Scope๋ฅผ ์ก์์ ์ฐ๊ฒ ๋ ๊ฒ์
๋๋ค.
using (IServiceScope scope = serviceProvider.CreateScope()) {
var singletonService = scope.ServiceProvider.GetService<SingletonOperation>();
var scopedService = scope.ServiceProvider.GetService<ScopedOperation>();
var transientService = scope.ServiceProvider.GetService<TransientOperation>();
}
์ฝ๋ ์ถ์ฒ: c# - Dependency injection using Services with Microsoft.Extensions.DependencyInjection library - Stack Overflow
์ฌ์ค ์ ๋ ๊ฒ๊น์ง ์จ๋ณธ์ ์ ์์ด์ Windows Desktop Application ๋จ์์ ๋ฌด์จ ์๋ฏธ์ธ๊ฐ ์ถ๊ธฐ๋ ํฉ๋๋ค.
ํ์ฌ,
ํน์ WPF๋ฅผ ์ฐ์ค ๋ Microsoft.Extensions.DependencyInjection ๋๋ Microsoft.Extensions.Hosting ์ ๋ง๊ณ ๋ค๋ฅธ IoC Container ๋ฅผ ์ฐ์๋ ๋ถ๋ค ๊ณ์ค๊น์?
์ ๊ฐ ์ด๋ฆ์ด๋ผ๋ ๋ค์ด๋ณธ IoC Container๋ ์๋์ ๊ฐ์ต๋๋ค.
์ ๋์
๋๋ค.
AutoFac์ ์ฌ์ค์ .NET์์ Microsoft.Extensions.DependencyInjection๊ณผ ๋น๋น ์ ์๋ ๊ฐ์ฅ ๊ฑฐ๋ํ IoC Container๋ผ ๋ฏฟ์์ง์ค๋ฝ๊ณ ์ต๊ทผ๊น์ง๋ ์
๋ฐ์ดํธ๊ฐ ํ๋ฐํ๊ฒ ์ด๋ค์ง๊ณ ์์ต๋๋ค.
๊ทธ ๋ฐ์๋ DryIoC ๋ Prism์์ ์ฃผ๋ก ์ฐ๋ ๊ฒ์ผ๋ก ์๊ณ ์๊ณ , Simple Injector๋ DevExpress์์ Sample Project๋ฅผ ์ ๊ณต๋ฐ์ ๋ ์ฃผ๋ก ์ ์ฉ๋์ด ์๊ฒ ๋์๊ณ , Ninject๋ ๋ช๋
์ ์ ๋ฐ์ง ๋ด๋ ๊ฒ ๊ฐ์๋ฐ ์ง๊ธ์ ์
๋ฐ์ดํธ๊ฐ ์๋๋ ๋ฏํ๊ณ , Splat์ ReactiveUI ์ ์ฉ์ด๋ผ RxUI๋ฅผ ์์ฐ๋ฉด ์ ์ฉํ๊ธฐ ์ด๋ ค์ธ ๊ฒ ๊ฐ์ต๋๋ค.
ํน์ WPF์์ ์ฌ์ฉํ๊ธฐ์ ์ ํฉํ๊ณ ์ถ์ฒํ ๋งํ IoC Container ๊ฐ ์๋ค๋ฉด ์ถ์ฒ๋ถํ๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ถ๊ฐ๋ก ์ ๊ฐ ์ ์จ๋ด์ ๋ชจ๋ฅด๊ฒ ์ง๋ง Claude Sonnet 4๋ ์๋์ ๊ฐ์ด ๋งํด์ค๋๋ค.
์ ์ฒด IoC Container ๋น๊ตํ
์ปจํ
์ด๋
์ฑ๋ฅ
๊ธฐ๋ฅ ๋ฒ์
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋
ํ์ต ๊ณก์
ํน์ง
MS.Extensions.DI
๋ณดํต
๊ธฐ๋ณธ
๋ฎ์
์ฌ์
.NET ํ์ค, Generic Host ํตํฉ
Autofac
๋ณดํต
๋งค์ฐ ๋์
๋์
๋ณดํต
๋ชจ๋ํ, ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ๋ถ
DryIoC
๋งค์ฐ ๋์
๋์
๋งค์ฐ ๋ฎ์
๋ณดํต
์ต๊ณ ์ฑ๋ฅ, ์กฐ๊ฑด๋ถ ๋ฑ๋ก
Splat
๋ฎ์
๋ฎ์
๋ฎ์
์ฌ์
ReactiveUI ์ ์ฉ
Ninject
๋ฎ์
๋์
๋ณดํต
์ฌ์
Fluent API, AOP ์ง์
Simple Injector
๋์
๋์
๋ฎ์
๋ณดํต
์ง๋จ ๊ธฐ๋ฅ, ์๊ฒฉํ ์ค๊ณ
6๊ฐ์ ์ข์์
WPF์์ Scope ์ ๊ฐ๋
์์ฒด๊ฐ ํ์ํ๊ฐ์?
์น์ฑ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฒญ์ด ๋ค์ด์์ผ ๋ญ๊ฐ๊ฐ ๋์๊ฐ๋ ์ฑ์ด๋ผ์, ์์กด์ฑ์ ์๋ช
์ฃผ๊ธฐ๋ฅผ ์์ฒญ ์ธ์
์ผ๋ก ํ์ ํ๋ Scope๊ฐ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์ฆ, ์์ฒญ ์ธ์
๋์์๋ Singlton ์ธ ๊ฒ์ด์ฃ .
๊ทธ๋ฌ๋, ๋ฐ์คํฌํ ์ฑ์ด๋ ํ๋ก ํธ ์ฑ์ ์ธ์
๊ฐ๋
์ด ์์ด์, Scoped ์๋ช
์ฃผ๊ธฐ๊ฐ ํฐ ์๋ฏธ๊ฐ ์์ต๋๋ค.(์ ๊ฐ ์๋ ํ)
์ฑ์ ์๋ช
์ฃผ๊ธฐ(์์ ~ ์ข
๋ฃ) ๋์ Singleton ์ด๋ Transient ๋์ ๊ตฌ๋ถ๋ง ์ค์ํ์ฃ .
๊ทธ๋ฆฌ๊ณ , ์๋ ์ฝ๋์ฒ๋ผ, ์์์ Scope๋ฅผ ์์ฑํ๋ ๊ฒ์ ํน๋ณํ ์ด์ ๊ฐ ์์ง ์๋ ํ ๋ถํ์ํ ๋ณต์ก์ฑ์
๋๋ค. ์ค์ ๋ก, Scoped ๋ก ๋ฑ๋ก๋์ด ์์ง๋ง ์๋ช
์ฃผ๊ธฐ๋ Transient ์ ๊ฐ(๊ฑฐ๋ ์งง)์ต๋๋ค. using ์ ๋ฒ์๊ฐ ๋๋๋ฉด, Scope ๋ ์ฌ๋ผ์ง๊ณ , ์์ฑ๋ ๋ชจ๋ ๊ฐ์ฒด๋ ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์
๋๋ค.
7๊ฐ์ ์ข์์
al6uiz
8์ 8, 2025, 8:36์ค์
3
์ ๊ฐ์ ๊ฒฝ์ฐ์๋ WPF๊ฐ๋ฐ์ DI ์ปจํ
์ด๋๋ก Microsoft.Extensions.DependencyInjection์ ์ฌ์ฉํ๊ณ ์๊ณ ,
Transient๋ง ๊ฐ์ง๊ณ ๋ ํ์ํ ์ผ์ด์ค๋ฅผ ์ปค๋ฒ ํ ์ ์์ด์ Scoped ์๋ช
์ฃผ๊ธฐ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
8๊ฐ์ ์ข์์
๋ค ๊ทธ๋์ ํ์์๋ค๋ ์๋ฏธ๋ก ์ฐ๊ธฐ ์ด๋ ต๋ค๊ณ ๋ง์๋๋ฆฐ ๊ฒ์
๋๋ค.
๊ทธ๋ ๊ธฐ์ ์์ฉ ์ดํ๋ฆฌ์ผ์ด์
์์ ๋ ์ ํฉํ IoC Container๊ฐ ์๋์ง ์ฌ์ญค๋ณธ ๊ธ์
๋๋ค.
๋ง์ํ์ ๋๋ก WPF์์๋ Scope์ Singleton์ด ๊ฐ๊ธฐ์ ์ ๋ Singleton๋ง ์ฌ์ฉํฉ๋๋ค.
6๊ฐ์ ์ข์์
๋ฐ์คํฌํฑ ์ฑ์ ๊ฐ๋ฐํ๋ฉด์ ๋ท๋ท ํ๋ซํผ ํ์ฅ(Microsoft.Extensions.DependencyInjection) ์ธ์ IoC ์ปจํ
์ด๋๋ฅผ ์ ํํด๋ณธ ์ ์ด ์์๋ ๊ฒ ๊ฐ์ต๋๋ค. Generic Host์ ์๋ฒฝํ ํตํฉ๋๊ณ , DI๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํ ๊ธฐ๋ณธ ๊ธฐ๋ฅ ๊ตฌํ์ ์ถฉ์คํด ๋ถํ์ํ ๋ฌ๋ ์ปค๋ธ๋ ์์ต๋๋ค.
๋ท๋ท ํ๋ซํผ ํ์ฅ์ ์ฌ์ฉํ๋ฉด์ ์์ฌ์ธ ๋งํ ๋ถ๋ถ์ด๋ผ๋ฉด ๊ธฐ๋ณธ ๊ธฐ๋ฅ์ ๋์ด์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ด ํ์ํ ๋์ผ ํ
๋ฐ, ๋ท๋ท ํ๋ซํผ ํ์ฅ์ ํ์ฅ์ด ์ฉ์ดํ๊ฒ ์ค๊ณ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋์ฒดํ์ง ์๊ณ ํ์ฅํ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ฉํ๋ฉด ๋ฉ๋๋ค. ๋ํ์ ์ผ๋ก Scrutor ๊ฐ ์์ต๋๋ค.
๋ท๋ท ํ๋ซํผ ํ์ฅ์์ ์ ๊ณตํ๋ DI๋ฅผ ์ฌ์ฉํ๋ฉด์ ํ๊ณ๊ฐ ๋๊ปด์ก๋ค๋ฉด, ์ด๋ฌํ ๋ท๋ท ํ๋ซํผ ํ์ฅ์ ํ์ฅ ์ ์ฌ์ฉํด ๋ณด๋ ๊ฒ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
5๊ฐ์ ์ข์์
์ ๊ฒฝ์ฐ๋ ํ์ฌ ์
๋ฌด์์๋ ๋ด๋ถ์ ์ผ๋ก ๊ฐ๋ฐํ ์ปจํ
์ด๋๋ฅผ ์ฌ์ฉํฉ๋๋ค๋ง, ํ์ฌ ๋ฐ์์์ ๊ฐ์ธ ํ๋ก์ ํธ์์๋ Microsoft.Extensions.DependencyInjection๋ฅผ ์ฃผ๋ก ์ฌ์ฉํฉ๋๋ค. ๋ญ๋๊น ์ฌํํด์ ์ข์ ๊ฒ ๊ฐ์์.
๊ทธ๋ฆฌ๊ณ ํ์ฌ์์ ์ฃผ๋ก MDI(Multiple-Document Interface) ๊ธฐ๋ฐ WPF ์์ฉํ๋ก๊ทธ๋จ์ ๋ง๋ค๊ธฐ ๋๋ฌธ์, ํ๋์ Document๋ฅผ ๊ธฐ์ค์ผ๋ก Scope๋ฅผ ์์ฑํด์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ํด๋น Document ์์์๋ง ๊ณต์ ๋์ด์ผ ํ๋ ์๋น์ค๋ค์ด ์์ด์์โฆ
๋ ๋ค๋ฅธ ์ผ์ด์ค๋ก๋, ์ ์ ํ ์์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ์ง๋ง SQL Server Management Studio์ฒ๋ผ ์ฌ๋ฌ ์ธ์
์ ๊ด๋ฆฌํด์ผ ํ๋ ๊ฒฝ์ฐ์ Scope๋ฅผ ํ์ฉํ๊ณ ์์ต๋๋ค.
๋ค๋ง Navigation ๊ธฐ๋ฐ ์์ฉํ๋ก๊ทธ๋จ์ผ ๋๋ Scope๋ฅผ ์ธ ์ผ์ด ๋ณ๋ก ์์๋ ๊ฒ ๊ฐ์ต๋๋ค.
7๊ฐ์ ์ข์์
10๋
์ ์ NInejct๋ฅผ DI์ฉ๋๋ก๋ง ์ฐ๋ ํํ๋ก ์งํํ์์ต๋๋ค. WPF ์๊ธฐ ๋๋ฌธ์ ์ฑ๋ฅ์์ ํฐ ์ด์ ๋ฐ ๋ฌธ์ ๋ ๋ณด์ด์ง ์์์ต๋๋ค.
WPF์ ๊ฐ๋ฐ ํจํด์์๋ ์๋ง์ ๊ฐ์ฒด๋ค์ด ์ค์๊ฐ์ผ๋ก ๋์ ํธ์ถ๋๋ ์ํฉ์ ๊ทธ๋ ๊ฒ ๋ง์ง ์๊ธฐ ๋๋ฌธ์ ์๋ง๋ ์ฑ๋ฅ์์ ์ด์ ์ ํ์ธํ์๊ธฐ ์ํด์๋ WPF๊ฐ ์๋ ์๋ฒ๋ฅ๋ก ํ์ธ ํ์
์ผ ํ ๊ฒ์
๋๋ค.
4๊ฐ์ ์ข์์
js
8์ 10, 2025, 9:55์คํ
8
WPF์์ DependencyInjection์ ์ฌ์ฉํ์ ๋ ์์ฌ์ด ๋ถ๋ถ์ ๋ํด, ์๋๋ฆฌ์ค ์๋ฅผ ๋ค์ด ๋ง์ํด์ฃผ์๋ฉด ๋์๋๋ ๋ต๋ณ์ ๋๊ตฐ๊ฐ ๋๊ธ๋ก ๋จ๊ธฐ์ง ์์๊น์? ์ฐธ๊ณ ๋ก .NET 8์์ Key๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๋ ์ถ๊ฐ๋์์ต๋๋ค.
3๊ฐ์ ์ข์์
Vincent
8์ 11, 2025, 12:19์ค์
9
์ ๊ฐ ์ง๋ฌธ๋๋ ธ๋ ์๋๋ ์์ฝ๋ค๊ธฐ๋ณด๋จ ๊ฑฐ์ฌ๋ฆฐ๋ค๋ ๋งฅ๋ฝ์ด์์ต๋๋ค.
ํ์ฌ WPF๋ฅผ ์ฃผ์
์ผ๋ก ์ผ๊ณ ์๋ ์ ์๊ฒ Microsoft.Extensions.DependencyInjection์ AddScoped๋ฅผ ์ฐ์ง ๋ชปํ๊ธฐ์ ์์ด๋ ๋๋ ๊ธฐ๋ฅ์ธ ๊ฒ์ด์ฃ .
์ฌ์ค ๋ฒ ๊ฐ๋ณธ๋๋๊ป์ ์ข์ ๊ฒฝํ๊ณต์ ๋ฅผ ํด์ฃผ์
จ๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ์์ฃผ์๋ ๊ฒฝ์ฐ๋ ์๋๊ณ ์ ๋ ์์ง ์ ํ์ ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ฐจ๋ผ๋ฆฌ AddScoped๊ฐ ์๋ ๋ค๋ฅธ Windows Desktop Application์ ํน์ง์ ์ด๋ฆฐ ๋ผ์ดํ์ฌ์ดํด ์ต์
์ด ์ถ๊ฐ๋ก ์กด์ฌํ ์ ์๋ Ioc Container๊ฐ ์์ผ๋ฉด ์ข์ง ์์๊น ํ๋ ๊ฒ์
๋๋ค.
๋๋ถ์ด ๋ท๋ท ํ์ด๋ก๋ถ๋ค ์๊ฒฌ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
4๊ฐ์ ์ข์์
Multi-Window๋ Multi-Page ์ฑ์ ํ๊ฒํ
ํด์ Scoped๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Window๋ Page์ ํ์ ๋ ์๋ช
๋ฒ์๋ฅผ ๋ง๋ค ์๋ ์์ ๊ฒ ๊ฐ์๋ฐ, ๊ทธ๋ฌํ ๊ฒฝ์ฐ DI ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด์์ ํด๊ฒฐํ๊ธฐ ๋ณด๋ค๋ UI ํ๋ ์์ํฌ์ ์ข
์๋ Window, Page ๋ฑ์ ์ปจํธ๋กค์ ์ฐธ์กฐํ๊ฑฐ๋ ํ์ฅํจ์ผ๋ก์จ ์ด๋ฃจ์ด์ง ์๋ฐ์ ์๊ณ , ๊ทธ๋ฌ๋ค ๋ณด๋ฉด ๊ฐ๋ฐ ๋ฐฉํฅ์ฑ์ด ์๋ก์ด IoC ์ปจํ
์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ UI ํ๋ ์์ํฌ์ DI ํ์ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํฅํ ์๋ฐ์ ์์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋๋ค์.
3๊ฐ์ ์ข์์