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

后端 未结 7 906
情书的邮戳
情书的邮戳 2020-12-07 09:53

I have a self-hosted .NET Core Console Application.

The web shows examples for ASP.NET Core but i do not have a webserver. Just a simple c

7条回答
  •  庸人自扰
    2020-12-07 10:12

    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()
                .AddConsole(LogLevel.Debug);
    
            var logger = serviceProvider.GetService()
                .CreateLogger();
    
            logger.LogDebug("Logger is working!");
    
            // Get Service and call method
            var service = serviceProvider.GetService();
            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(Configuration);
            services.AddSingleton();
        }
    }
    

    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 _logger;
    
        public MyService(ILoggerFactory loggerFactory, IConfigurationRoot config)
        {
            var baseUrl = config["SomeConfigItem:BaseUrl"];
            var token = config["SomeConfigItem:Token"];
    
            _baseUrl = baseUrl;
            _token = token;
            _logger = loggerFactory.CreateLogger();
        }
    
        public async Task MyServiceMethod()
        {
            _logger.LogDebug(_baseUrl);
            _logger.LogDebug(_token);
        }
    }
    

    IMyService.cs

    public interface IMyService
    {
        Task MyServiceMethod();
    }
    

提交回复
热议问题