The built-in DI Mechanism in a .Net Core Console Application is available using
Microsoft.Extensions.DependencyInjection package
after DI package installation, configuring services is possible via instantiating a ServiceCollection instance.
Serilog logging functionality can be added as follows.
var serviceProvider = new ServiceCollection()
.AddSingleton<IFoo, Foo>()
.AddSingleton<IBar, Bar>()
.AddLogging(builder =>
{
var logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
builder.AddSerilog(logger);
})
.BuildServiceProvider();
to have DI configurations encapsulated, configuration can be implemented in a class.
public class Startup
{
private ServiceProvider _serviceProvider;
public Startup()
{
ConfigureServices();
}
private void ConfigureServices()
{
_serviceProvider = new ServiceCollection()
.AddSingleton<IFoo, Foo>()
.AddSingleton<IBar, Bar>()
.AddLogging(builder =>
{
var logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.CreateLogger();
builder.AddSerilog(logger);
})
.BuildServiceProvider();
}
public ServiceProvider Provider { get { return _serviceProvider; } }
}
Then in the program main method, a new instance of Startup class should be created and starting point implementation can call using the provider property of the startup instance.
var startup = new Startup();
startup.Provider.GetService<IFoo>().DoSomthing();