I have a self-hosted .NET Core Console Application.
The web shows examples for ASP.NET Core but I do not have a web server. Just a simple command line application.
Is it possible to do something like this for console applications?
public static void Main(string[] args) { // I don't want a WebHostBuilder. Just a command line var host = new WebHostBuilder() .UseKestrel() .UseContentRoot(Directory.GetCurrentDirectory()) .UseIISIntegration() .UseStartup<Startup>() .Build(); host.Run(); }
I would like to use a Startup.cs like in ASP.NET Core but on console.
How do I to this?
GetFullPath("."); and then before calling new Startup in Program. cs do IHostingEnvironment env = new MyHostingEnvironment(); services. AddSingleton<IHostingEnvironment, MyHostingEnvironment>(); and then change "new Startup()" to "new Startup(env)". Excellent answer!
So i came across with this solution, inspired by the accepted answer:
Program.cs
public class Program { public static void Main(string[] args) { IServiceCollection services = new ServiceCollection(); // Startup.cs finally :) Startup startup = new Startup(); startup.ConfigureServices(services); IServiceProvider serviceProvider = services.BuildServiceProvider(); //configure console logging serviceProvider .GetService<ILoggerFactory>() .AddConsole(LogLevel.Debug); var logger = serviceProvider.GetService<ILoggerFactory>() .CreateLogger<Program>(); logger.LogDebug("Logger is working!"); // Get Service and call method var service = serviceProvider.GetService<IMyService>(); service.MyServiceMethod(); } }
Startup.cs
public class Startup { IConfigurationRoot Configuration { get; } public Startup() { var builder = new ConfigurationBuilder() .AddJsonFile("appsettings.json"); Configuration = builder.Build(); } public void ConfigureServices(IServiceCollection services) { services.AddLogging(); services.AddSingleton<IConfigurationRoot>(Configuration); services.AddSingleton<IMyService, MyService>(); } }
appsettings.json
{ "SomeConfigItem": { "Token": "8201342s223u2uj328", "BaseUrl": "http://localhost:5000" } }
MyService.cs
public class MyService : IMyService { private readonly string _baseUrl; private readonly string _token; private readonly ILogger<MyService> _logger; public MyService(ILoggerFactory loggerFactory, IConfigurationRoot config) { var baseUrl = config["SomeConfigItem:BaseUrl"]; var token = config["SomeConfigItem:Token"]; _baseUrl = baseUrl; _token = token; _logger = loggerFactory.CreateLogger<MyService>(); } public async Task MyServiceMethod() { _logger.LogDebug(_baseUrl); _logger.LogDebug(_token); } }
IMyService.cs
public interface IMyService { Task MyServiceMethod(); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With