I created a consumer/job that I will have running as a process on Linux written in C#.
The process will:
In DotNet Core 2 you can use the start up class now and clean up the code a bit to look more like the web one.
And as a bonus a way to start your app inside the DI container using ConsoleApp
Program.cs
static void Main(string[] args)
{
IServiceCollection services = new ServiceCollection();
Startup startup = new Startup();
startup.ConfigureServices(services);
IServiceProvider serviceProvider = services.BuildServiceProvider();
// entry to run app
serviceProvider.GetService().Run();
}
Startup.cs
public class Startup
{
IConfigurationRoot Configuration { get; }
public Startup()
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
Configuration = builder.Build();
}
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton(Configuration);
services.AddSingleton();
services.AddLogging(loggingBuilder => {
loggingBuilder.AddNLog("nlog.config");
});
services.AddTransient();
}
}
ConsoleApp.cs
public class ConsoleApp
{
private readonly ILogger _logger;
private readonly IMyConfiguration _config;
public ConsoleApp(IMyConfiguration configurationRoot, ILogger logger)
{
_logger = logger;
_config = configurationRoot;
}
public void Run()
{
var test = _config.YourItem;
_logger.LogCritical(test);
System.Console.ReadKey();
}
}
Configuration.cs
public class MyConfiguration : IMyConfiguration
{
IConfigurationRoot _configurationRoot;
public MyConfiguration(IConfigurationRoot configurationRoot)
{
_configurationRoot = configurationRoot;
}
public string YourItem => _configurationRoot["YourItem"];
}
public interface IMyConfiguration
{
string YourItem { get; }
}