Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Startup.cs in a self-hosted .NET Core Console Application

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?

like image 263
Daniel Avatar asked Dec 31 '16 09:12

Daniel


People also ask

How do you call a startup CS from the console application?

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!


1 Answers

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(); } 
like image 128
Daniel Avatar answered Oct 01 '22 10:10

Daniel