In the startup file I need a way to access IConfiguration in another project. I have been told the Business Logic should not know about IConfiguration. If thats the case then how do I inject data from appsettings down to the business logic projects.
appsettings.json
{
  "AdminEmail": "[email protected]"
}
How would I access AdminEmail in a class library I created in the same solution?
Define a model for settings
public sealed class EmailSettings
{
    public string AdminEmail { get; set; }
}
Configure settings
public sealed class Startup
{
    private readonly IConfiguration configuration;
    public Startup(IConfiguration configuration) => this.configuration = configuration;
    public void ConfigureServices(IServiceCollection services)
    {
        services
            .Configure<EmailSettings>(configuration)
            .AddSingleton(sp => sp.GetRequiredService<IOptions<EmailSettings>>().Value);
    }
}
Inject and use it
public class ClassLibraryInTheSameSolution
{
    public ClassLibraryInTheSameSolution(EmailSettings emailSettings)
    {                         
    }
}
You could inject it quite easily:
public class EmailSettings
{
    public string AdminEmail { get; set; } // encapsulate as needed
}
public void ConfigureServices(IServiceCollection services)
{
    var settings = new EmailSettings
    {
        AdminEmail = Configuration["AdminEmail"]
    };
    services.AddSingleton(settings);
}
public class WhereverYouNeedThis
{
    private readonly EmailSettings _emailSettings;
    public WhereverYouNeedThis(EmailSettings emailSettings)
    {
        _emailSettings = emailSettings;
    }
    public void Use()
    {
        Debug.Log(_emailSettings.AdminEmail);
    }
}
                        You can use Microsoft.Extensions.Configuration to achieve this. https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?tabs=basicconfiguration
1 - Create a model for the settings
public class AppSettings 
{
    public string AdminEmail { get; set; }
}
2 - Configure it on Startup.cs
services.Configure<AppSettings>(Configuration);
3 - Use DI in your class library to retrieve the settings
private readonly AppSettings _appSettings;
public MyClass(IOptions<AppSettings> appSettings)
{
    _appSettings = appSettings.Value;
}
                        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