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/