.Net Core Console Application IoC

The default setup for .Net Core MVC application is to use IoC. You get a Startup.cs file created that contains boilerplate code for IoC.

If you want to use the builtin IoC with .Net Core you have to write it yourself. Luckily the HostBuilder makes this easy. HostBuilder is provided by the Generic Host introduced in .Net Core 2.1.

You need to add nuget packages:

  • Install-Package Microsoft.Extensions.Hosting
  • Install-Package Microsoft.Extensions.DependencyInjection
  • Install-Package Microsoft.Extensions.Configuration
  • Install-Package Microsoft.Extensions.Configuration.Json
  • Install-Package Microsoft.Extensions.Configuration.CommandLine
  • Install-Package Microsoft.Extensions.Logging
  • Install-Package Microsoft.Extensions.Logging.Console

Main.cs

using Microsoft.Extensions.Hosting;
using System.Threading.Tasks;

public static class Main
{
    public static async Task Main()
    {
        var builder = new Microsoft.Extensions.Hosting.HostBuilder()
            .ConfigureHostConfiguration(Startup.ConfigureHostConfiguration)
            .ConfigureAppConfiguration(Startup.ConfigureAppConfiguration)
            .ConfigureLogging(Startup.ConfigureLogging)
            .ConfigureServices(Startup.ConfigureServices);

        await builder.RunConsoleAsync();
    }
}

Startup.cs

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using System;
using System.IO;

internal static class Startup
{
    internal static void ConfigureHostConfiguration(IConfigurationBuilder config)
    {

    }

    internal static void ConfigureAppConfiguration(HostBuilderContext hostingContext, IConfigurationBuilder config)
    {
        config.SetBasePath(Directory.GetCurrentDirectory());
        config.AddJsonFile("appsettings.json", true);
        // Optional: Add command line arguments as config
        var args = Environment.GetCommandLineArgs();
        if (args != null) config.AddCommandLine(args);
    }
    internal static void ConfigureLogging(HostBuilderContext hostingContext, ILoggingBuilder loggingBuilder)
    {
        loggingBuilder.AddConfiguration(hostingContext.Configuration);
    }

    internal static void ConfigureServices(HostBuilderContext hostingContext, IServiceCollection services)
    {
        // https://docs.microsoft.com/en-us/dotnet/api/microsoft.extensions.hosting.hostoptions?view=aspnetcore-2.2
        /*services.Configure<HostOptions>(option =>
        {
            option.ShutdownTimeout = TimeSpan.FromSeconds(20);
        });*/
    }
}

Config example

{
   "Logging": {
     "IncludeScopes": false,
     "LogLevel": {
       "Default": "Information",
       "System": "Warning",
       "Microsoft": "Information"
     },
     "Console": {
       "LogLevel": {
         "Default": "Warning",
         "System": "Information",
         "Microsoft": "Information"
       }
      }
   }
}

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Discover more from Tedds blog

Subscribe now to keep reading and get access to the full archive.

Continue reading