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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
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) { /*services.Configure<HostOptions>(option => { option.ShutdownTimeout = TimeSpan.FromSeconds(20); });*/ } } |
Config example
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Information", "System": "Warning", "Microsoft": "Information" }, "Console": { "LogLevel": { "Default": "Warning", "System": "Information", "Microsoft": "Information" } } } } |