Understanding dependency injection containers
The dependency injection container is not really a requirement to apply the DI technique. However, using it can simplify the management of all of your dependencies, including their lifetimes, as your application grows and becomes more complex.
.NET Core comes with a built-in DI/IoC container that simplifies DI management. In fact, the default ASP.NET Core application template uses DI extensively. You can see it by looking at the Startup
class of your ASP.NET Core application:
public class Startup
{
    public IConfiguration Configuration { get; }
    public Startup(IConfiguration configuration)
    {
       Configuration = configuration;
    }
    public void ConfigureServices(IServiceCollection services)
    {
       ...