diff --git a/DependencyInjection.cs b/DependencyInjection.cs index 4003b42..3fdd68a 100644 --- a/DependencyInjection.cs +++ b/DependencyInjection.cs @@ -1,3 +1,5 @@ +using System.Diagnostics; +using System.Reflection.Metadata; using Microsoft.Extensions.DependencyInjection; namespace DependencyInjections @@ -33,12 +35,32 @@ namespace DependencyInjections serviceCollection.AddTransient(); + bool UseSQL = false; + + if (UseSQL) + { + serviceCollection.AddTransient(); + } + else + { + serviceCollection.AddSingleton(); + } + + serviceCollection.AddTransient(); + + serviceCollection.AddTransient(); + serviceCollection.AddTransient(); + + serviceCollection.AddTransient(); + var sp = serviceCollection.BuildServiceProvider(); sp.GetRequiredService().Log(); sp.GetRequiredService().process(); sp.GetRequiredService().SendNotification("Hello, There"); - + sp.GetRequiredService().SeedProducts(); + sp.GetRequiredService().DisplayAllProducts(); + sp.GetRequiredService().Start(); } } @@ -162,4 +184,179 @@ namespace DependencyInjections } } } + + public interface IProductRepository + { + List GetAllProducts(); + void AddProduct(string name); + } + + public class InMemoryProductReposity : IProductRepository + { + List products = new List(); + + public void AddProduct(string name) + { + products.Add(name); + } + + public List GetAllProducts() + { + return products; + } + } + + public class SqlProductRepository : IProductRepository + { + public void AddProduct(string name) + { + Console.WriteLine($"Wrote {name} to SQL Database"); + } + + public List GetAllProducts() + { + Console.WriteLine("Got all products from SQL Database"); + return new List(); + } + } + + public class ProductService + { + private readonly IProductRepository productRepository; + + public ProductService(IProductRepository productRepository) + { + this.productRepository = productRepository; + } + + public void SeedProducts() + { + productRepository.AddProduct("Skovl"); + productRepository.AddProduct("Spade"); + productRepository.AddProduct("Spand"); + productRepository.AddProduct("Teslacoil"); + } + + public void DisplayAllProducts() + { + foreach (var prod in productRepository.GetAllProducts()) + { + Console.WriteLine($"Got: {prod}"); + } + } + } + + public interface IGameEngine + { + void Play(); + } + + public class GuessNumberGame : IGameEngine + { + public void Play() + { + int rightNumber = new Random().Next(1, 11); + + Console.WriteLine("Guess number between 1 and 10"); + + var readline = Console.ReadLine(); + + if (int.TryParse(readline, out var number)) + { + if (number.Equals(rightNumber)) + { + Console.WriteLine("You won."); + } + else + { + Console.WriteLine("WRONG"); + } + } + else + { + Console.WriteLine("Is that even a number?"); + } + } + } + + public class RockPaperScissorsGame : IGameEngine + { + public void Play() + { + var posibilities = new List() + { + "scissor", + "paper", + "rock", + }; + + Console.WriteLine("Choose between"); + + for (int i = 0; i < posibilities.Count; i++) + { + Console.WriteLine($"{i}: {posibilities[i]}"); + } + + var readline = Console.ReadLine(); + + if (int.TryParse(readline, out var number)) + { + if (number > posibilities.Count) + { + Console.WriteLine("Must choose inside the range"); + } + + var computerPlay = new Random().Next(0, 3); + + Console.WriteLine($"Computer choose: {posibilities[computerPlay]}"); + + if (computerPlay > number || (computerPlay == 0 && number == 2)) + { + Console.WriteLine("Computer won..."); + } + else + { + Console.WriteLine("You won"); + } + } + else + { + Console.WriteLine("Is that even a number?"); + } + } + } + + public class GameManager + { + private readonly IEnumerable gameEngines; + + public GameManager(IEnumerable gameEngines) + { + this.gameEngines = gameEngines; + } + + public void Start() + { + Console.WriteLine("Choose game"); + + for (int i = 0; i < gameEngines.Count(); i++) + { + Console.WriteLine(i + ": " + gameEngines.ToList()[i].GetType().Name); + } + + var readline = Console.ReadLine(); + + if (int.TryParse(readline, out var number)) + { + if (number > gameEngines.Count()) + { + Console.WriteLine("Must be in range"); + } + else + { + gameEngines.ToList()[number].Play(); + } + } + } + } } \ No newline at end of file