Simple Dependency Injection in .NET Core Console App

If you’re using ASP.NET Core, you get dependency injection out of the box. If you’re building a console app, you can get simple dependency injection with just a little bit of code.

For basic mapping, all you need is to create a ServiceProvider object that maps  your types, and your constructor injection works perfectly. Here’s a working sample:

// dotnet add package Microsoft.Extensions.DependencyInjection
class Program {
 
    // Map your items. Note that you can map a class to itself.
    private static ServiceProvider _serviceProvider = new ServiceCollection()
        .AddTransient<Program, Program>()
        .AddTransient<IManager, Manager>()
        .AddTransient<IRepository, Repository>()
        .BuildServiceProvider();
 
    // Uses the service provider to retrieve a Program instance and call Go()
    static void Main() => _serviceProvider.GetService<Program>().Go();
 
    // Constructor injection pulls in a Manager object
    private readonly IManager _manager;
    public Program(IManager manager) => _manager = manager;
 
    public void Go() => _manager.Go();
}
 
public interface IManager { void Go(); }
 
public class Manager : IManager {
 
    // Constructor injection pulls in a Repository object
    private readonly IRepository _repo;
    public Manager(IRepository repo) => _repo = repo;
 
    void IManager.Go() => Console.WriteLine(_repo.Hello("world"));
}
 
public interface IRepository { string Hello(string name); }
 
public class Repository : IRepository {
    string IRepository.Hello(string name) => $"Hello {name}";
}

Reference: https://andrewlock.net/using-dependency-injection-in-a-net-core-console-application/