Simple Dependency Injection in .NET Core Console App

Posted by Joe Enos on June 06, 2021 · 4 mins read

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/