๊ฒ์ผ๋ฅธ ๊ฐ๋ฐ์๋ค์ ์ํ ์๋ฆฌ์ฆ 1ํ LazyVoom ์ ์ด์ด 2ํ์ผ๋ก LazyVoom.Hosting์ ๋ง๋ค์ด๋ณด์์ต๋๋ค.
๋ง ๊ทธ๋๋ก Host ๊ธฐ๋ฐ์ผ๋ก ์ฑ์ ์คํํ๊ณ ๊ด๋ฆฌํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
ํ์ฌ๋ WPF์ WinForms๋ฅผ ๋จผ์ ์ง์ํ๋ฉฐ, ํฅํ Avalonia, Uno, MAUI, OpenSilver ๋ฑ์์๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ํ์ฅํ ๊ณํ์
๋๋ค.
๊ธฐ์กด์ WPF์์ ํํ ์ฐ๋ App๊ณผ MainWindow๋ฅผ ์ง์ ์์ฑํ๋ ๋ฐฉ์์์ ๋ฒ์ด๋, Host ๊ธฐ๋ฐ์ผ๋ก ๊น๋ํ๊ฒ ์ฑ์ ์์ํ ์ ์์ต๋๋ค.
Program์ ๊ตณ์ด ์์ฑํด์ ์ฑ์ ์์ํ๊ณ ์ถ๋ค๋ฉด
์๋ ์ฒซ ๋ฒ์งธ ๋ฐฉ์์ฒ๋ผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ธฐ์กด๋ฐฉ์
// ๊ธฐ์กด Program.cs
internal class Program
{
[STAThread]
private static void Main(string[] args)
{
App app = new();
app.Run();
}
}
LazyVoom.Hosting ์ ์ฉ
var builder = Host.CreateApplicationBuilder();
var app = builder.BuildApp(); // ๐ฅ
app.OnStartUpAsync = async provider =>
{
// ์ฌ๊ธฐ์ DI ์๋น์ค ๊ฐ์ ธ์ ์ด๊ธฐํ ๊ฐ๋ฅ
};
app.Run();
LazyVoom.Hosting์ ํน์ง
-
Host ๊ธฐ๋ฐ DI ์ง์
๊ธฐ์กด HostBuilder์ ๋์ผํ๊ฒ DI๋ฅผ ๋ฑ๋กํ๊ณ , ์ฑ ์์ ์ ๋ชจ๋ ์๋น์ค์ ์ ๊ทผํ ์ ์์ต๋๋ค.
๊ฒ์ผ๋ฅธ ๊ฐ๋ฐ์๋ผ๋ DI๋ฅผ ๊น๋ํ๊ฒ ์ฐ๋ ์ต๊ด์ ์ ์งํ ์ ์์ต๋๋ค. -
Async Startup ์ง์
์ฑ ์์ ์ ํ์ํ ์ด๊ธฐํ ์์ ์async๋ก ์์ฑํ ์ ์์ต๋๋ค.
WPF/WinForms์์ ํํ ๊ฒช๋ UI ์ค๋ ๋์ ๋น๋๊ธฐ ์ด๊ธฐํ ๋ฌธ์ ๋ฅผ ํ ๋ฒ์ ํด๊ฒฐํฉ๋๋ค. -
๋ฉํฐ UI ํ๋ซํผ ํ์ฅ ๊ฐ๋ฅ
ํ์ฌ๋ WPF์ WinForms๋ฅผ ์ง์ํ์ง๋ง, ํฅํ Avalonia, Uno, MAUI, OpenSilver ๋ฑ ๋ค์ํ UI ํ๋ ์์ํฌ๋ก ํ์ฅ ๊ฐ๋ฅํฉ๋๋ค.
Host ๊ธฐ๋ฐ์ผ๋ก ๊ณตํต ์ธํฐํ์ด์ค๋ฅผ ์ ์งํ๋ฉด์ ํ๋ซํผ๋ณ ์ฑ ์คํ์ ๊ตฌํํ ์ ์์ต๋๋ค. -
๋ณด์ผ๋ฌํ๋ ์ดํธ ์ต์ํ
App.xaml.cs๋ Program.cs์ ๋ฐ๋ณต๋๋ ์ฝ๋๋ฅผ ์ค์ด๊ณ , ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง์ ์ง์คํ ์ ์์ต๋๋ค.
์์: DI์ ์ด๊ธฐํ ํจ๊ป ์ฌ์ฉ
var builder = Host.CreateApplicationBuilder();
builder.Services.AddSingleton<IMyService, MyService>();
var app = builder.BuildApp();
app.OnStartUpAsync = async provider =>
{
var service = provider.GetRequiredService<IMyService>();
await service.InitializeAsync();
};
app.Run();
์ด์ ์ฑ ์คํ๊ณผ DI ์ด๊ธฐํ๋ฅผ ํ ๊ณณ์์ ๊ด๋ฆฌํ ์ ์์ผ๋ฉฐ, UI ํ๋ ์์ํฌ๊ฐ ๋ฌ๋ผ๋ ๋์ผํ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ง๋ฌด๋ฆฌ
LazyVoom.Hosting์ ๊ฒ์ผ๋ฅธ ๊ฐ๋ฐ์๋ฅผ ์ํด ๋ง๋ค์ด์ก์ต๋๋ค.
Host ๊ธฐ๋ฐ์ผ๋ก ์ฑ ์คํ๊ณผ DI ์ด๊ธฐํ๋ฅผ ํตํฉํ์ฌ, ๋ณต์กํ ์ฑ๋ ์ต์ํ์ ์ฝ๋๋ก ์์ํ ์ ์๋๋ก ๋์ต๋๋ค.