示例#1
0
        static void Main(string[] args)
        {
            var serviceCollection = new ServiceCollection();

            serviceCollection.AddTransient <I支払機 <硬貨>, 硬貨支払機>();
            serviceCollection.AddSingleton <I商品在庫Repository, Memory商品在庫Repository>();
            serviceCollection.AddTransient <I自動販売機 <硬貨>, 硬貨自動販売機>();
            serviceCollection.AddTransient <I自動販売機ユーザUseCase, 硬貨自動販売機ユーザUseCase>();
            serviceCollection.AddTransient <I自動販売機Controller, 自動販売機ConsoleController>();
            serviceCollection.AddTransient <I自動販売機Presentation, 自動販売機ConsolePresentation>();

            var                serviceProvider = serviceCollection.BuildServiceProvider();
            I商品在庫Repository    stockRepository = serviceProvider.GetService <I商品在庫Repository>();
            I自動販売機Controller   controller      = serviceProvider.GetService <I自動販売機Controller>();
            I自動販売機Presentation presentation    = serviceProvider.GetService <I自動販売機Presentation>();

            stockRepository.Register商品(new 販売コード("a"), new 販売商品(new 商品名("水"), new 通貨(100)));
            stockRepository.Register商品(new 販売コード("b"), new 販売商品(new 商品名("コーラ"), new 通貨(120)));
            stockRepository.Register商品(new 販売コード("c"), new 販売商品(new 商品名("オレンジジュース"), new 通貨(130)));
            foreach (var code in stockRepository.販売コード一覧())
            {
                stockRepository.Add数量(code, 5);
            }

            var consoleController   = controller as 自動販売機ConsoleController;
            var consolePresentation = presentation as 自動販売機ConsolePresentation;

            while (true)
            {
                var input   = consoleController.Input();
                var command = consoleController.Parse(input);
                var result  = consoleController.Execute(command);
                consolePresentation.Print(result);
            }
        }
 public 硬貨自動販売機(I商品在庫Repository 商品在庫Repository, I支払機 <硬貨> 支払機)
 {
     this.商品在庫Repository = 商品在庫Repository ?? throw new ArgumentNullException(nameof(商品在庫Repository) + " cannot be null");
     this.支払機            = 支払機 ?? throw new ArgumentNullException(nameof(支払機) + " cannot be null");
 }