using System.Collections.Generic;
using Microsoft.Extensions.DependencyInjection;
public static void Main()
var services = new ServiceCollection();
services.AddSingleton<IUserService, InMemoryUserService>();
services.AddSingleton<IHandler, UsersHandler>();
var serviceProvider = services.BuildServiceProvider();
var command = Console.ReadLine();
var handlers = serviceProvider.GetServices<IHandler>();
if (handlers.Count() > 0)
var handler = handlers.FirstOrDefault(it => it.CommandName == command);
Console.WriteLine("'" + command + "' command was unrecognized.");
public interface IHandler
string CommandName { get; }
public class UsersHandler : IHandler
public string CommandName
get { return "display-players"; }
public IUserService UserService;
public UsersHandler(IUserService userService)
foreach (var user in UserService.GetUsers())
Console.WriteLine("User: " + user.Name);
public string Name { get; set; }
public string TeamId { get; set; }
public interface IUserService : IDisposable
IEnumerable<User> GetUsers();
public class InMemoryUserService : IUserService
public IEnumerable<User> GetUsers()
throw new ArgumentException("Service was already disposed.");
List<User> users = new List<User>();