From e5b4984515e497ceb967b77ecc7f72e5f6e3d127 Mon Sep 17 00:00:00 2001 From: syneffort Date: Thu, 24 Aug 2023 13:57:28 +0900 Subject: [PATCH] dependency injection --- BlazorApp/BlazorApp/Data/FastFoodService.cs | 16 +++++++ BlazorApp/BlazorApp/Data/Food.cs | 8 ++++ BlazorApp/BlazorApp/Data/FoodService.cs | 17 +++++++ BlazorApp/BlazorApp/Data/IFoodService.cs | 7 +++ BlazorApp/BlazorApp/Data/PaymentService.cs | 12 +++++ BlazorApp/BlazorApp/Data/SingletonService.cs | 47 +++++++++++++++++++ .../BlazorApp/Data/WeatherForecastService.cs | 4 +- BlazorApp/BlazorApp/Pages/Food.razor | 32 +++++++++++++ BlazorApp/BlazorApp/Program.cs | 9 ++++ BlazorApp/BlazorApp/Shared/NavMenu.razor | 5 ++ 10 files changed, 155 insertions(+), 2 deletions(-) create mode 100644 BlazorApp/BlazorApp/Data/FastFoodService.cs create mode 100644 BlazorApp/BlazorApp/Data/Food.cs create mode 100644 BlazorApp/BlazorApp/Data/FoodService.cs create mode 100644 BlazorApp/BlazorApp/Data/IFoodService.cs create mode 100644 BlazorApp/BlazorApp/Data/PaymentService.cs create mode 100644 BlazorApp/BlazorApp/Data/SingletonService.cs create mode 100644 BlazorApp/BlazorApp/Pages/Food.razor diff --git a/BlazorApp/BlazorApp/Data/FastFoodService.cs b/BlazorApp/BlazorApp/Data/FastFoodService.cs new file mode 100644 index 0000000..db3a2c7 --- /dev/null +++ b/BlazorApp/BlazorApp/Data/FastFoodService.cs @@ -0,0 +1,16 @@ +namespace BlazorApp.Data +{ + public class FastFoodService : IFoodService + { + public IEnumerable GetFoods() + { + List foods = new List() + { + new Food() { Name = "감자튀김", Price = 1500 }, + new Food() { Name = "햄버거", Price = 6000 }, + }; + + return foods; + } + } +} diff --git a/BlazorApp/BlazorApp/Data/Food.cs b/BlazorApp/BlazorApp/Data/Food.cs new file mode 100644 index 0000000..06bc3bc --- /dev/null +++ b/BlazorApp/BlazorApp/Data/Food.cs @@ -0,0 +1,8 @@ +namespace BlazorApp.Data +{ + public class Food + { + public string Name { get; set; } + public int Price { get; set; } + } +} diff --git a/BlazorApp/BlazorApp/Data/FoodService.cs b/BlazorApp/BlazorApp/Data/FoodService.cs new file mode 100644 index 0000000..e278192 --- /dev/null +++ b/BlazorApp/BlazorApp/Data/FoodService.cs @@ -0,0 +1,17 @@ +namespace BlazorApp.Data +{ + public class FoodService : IFoodService + { + public IEnumerable GetFoods() + { + List foods = new List() + { + new Food() { Name = "비빔밥", Price = 9000 }, + new Food() { Name = "김밥", Price = 4000 }, + new Food() { Name = "쫄면", Price = 7000 }, + }; + + return foods; + } + } +} diff --git a/BlazorApp/BlazorApp/Data/IFoodService.cs b/BlazorApp/BlazorApp/Data/IFoodService.cs new file mode 100644 index 0000000..4ea4c65 --- /dev/null +++ b/BlazorApp/BlazorApp/Data/IFoodService.cs @@ -0,0 +1,7 @@ +namespace BlazorApp.Data +{ + public interface IFoodService + { + public IEnumerable GetFoods(); + } +} diff --git a/BlazorApp/BlazorApp/Data/PaymentService.cs b/BlazorApp/BlazorApp/Data/PaymentService.cs new file mode 100644 index 0000000..61ed609 --- /dev/null +++ b/BlazorApp/BlazorApp/Data/PaymentService.cs @@ -0,0 +1,12 @@ +namespace BlazorApp.Data +{ + public class PaymentService + { + private IFoodService _service; + + public PaymentService(IFoodService service) + { + _service = service; + } + } +} diff --git a/BlazorApp/BlazorApp/Data/SingletonService.cs b/BlazorApp/BlazorApp/Data/SingletonService.cs new file mode 100644 index 0000000..e323808 --- /dev/null +++ b/BlazorApp/BlazorApp/Data/SingletonService.cs @@ -0,0 +1,47 @@ +namespace BlazorApp.Data +{ + public class SingletonService : IDisposable + { + public Guid ID { get; set; } + + public SingletonService() + { + ID = Guid.NewGuid(); + } + + public void Dispose() + { + Console.WriteLine($"SingletonService was disposed (Guid: {this.ID.ToString()})"); + } + } + + public class TransientService : IDisposable + { + public Guid ID { get; set; } + + public TransientService() + { + ID = Guid.NewGuid(); + } + + public void Dispose() + { + Console.WriteLine($"TransientService was disposed (Guid: {this.ID.ToString()})"); + } + } + + public class ScopedService : IDisposable + { + public Guid ID { get; set; } + + public ScopedService() + { + ID = Guid.NewGuid(); + } + + public void Dispose() + { + Console.WriteLine($"ScopedService was disposed (Guid: {this.ID.ToString()})"); + } + } +} diff --git a/BlazorApp/BlazorApp/Data/WeatherForecastService.cs b/BlazorApp/BlazorApp/Data/WeatherForecastService.cs index 8f10c36..46a0483 100644 --- a/BlazorApp/BlazorApp/Data/WeatherForecastService.cs +++ b/BlazorApp/BlazorApp/Data/WeatherForecastService.cs @@ -4,8 +4,8 @@ namespace BlazorApp.Data { private static readonly string[] Summaries = new[] { - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - }; + "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" + }; public Task GetForecastAsync(DateTime startDate) { diff --git a/BlazorApp/BlazorApp/Pages/Food.razor b/BlazorApp/BlazorApp/Pages/Food.razor new file mode 100644 index 0000000..618f1a9 --- /dev/null +++ b/BlazorApp/BlazorApp/Pages/Food.razor @@ -0,0 +1,32 @@ +@page "/food" +@using BlazorApp.Data; + +@inject IFoodService _foodService; +@inject PaymentService _paymentService; + +@inject SingletonService _singleton; +@inject ScopedService _scoped; +@inject TransientService _transient; + +

Food

+ +
+ @foreach (var food in _foodService.GetFoods()) + { +
@food.Name
+
@food.Price
+ } +
+ +
+

Singleton

+ +

Scoped

+ +

Transient

+ +
+ +@code { + +} \ No newline at end of file diff --git a/BlazorApp/BlazorApp/Program.cs b/BlazorApp/BlazorApp/Program.cs index 0a4883e..b81bb9b 100644 --- a/BlazorApp/BlazorApp/Program.cs +++ b/BlazorApp/BlazorApp/Program.cs @@ -15,6 +15,15 @@ namespace BlazorApp builder.Services.AddServerSideBlazor(); builder.Services.AddSingleton(); + // Dependency Injection + builder.Services.AddSingleton(); + builder.Services.AddSingleton(); + + // 3 + builder.Services.AddSingleton(); // ۽ + builder.Services.AddScoped(); // ӽ + builder.Services.AddTransient(); // û + var app = builder.Build(); // Configure the HTTP request pipeline. diff --git a/BlazorApp/BlazorApp/Shared/NavMenu.razor b/BlazorApp/BlazorApp/Shared/NavMenu.razor index 9d694da..8bdab02 100644 --- a/BlazorApp/BlazorApp/Shared/NavMenu.razor +++ b/BlazorApp/BlazorApp/Shared/NavMenu.razor @@ -34,6 +34,11 @@ User +