So I'm trying to use Autofac DI to pass my configuration json file through the stack. My Main function is as follows:
static void Main(string[] args)
{
Console.WriteLine("Starting...");
// Add the configuration to the ConfigurationBuilder.
var config = new ConfigurationBuilder();
config.AddJsonFile("appsettings.json");
var containerBuilder = new ContainerBuilder();
// Register the ConfigurationModule with Autofac.
var configurationModule = new ConfigurationModule(config.Build());
containerBuilder.RegisterModule(configurationModule);
// register a specific consumer
containerBuilder.RegisterType<BusSettings>();
containerBuilder.RegisterModule<BusModule>();
Container = containerBuilder.Build();
}
I have sucessfully registered the modules here... next my BusModule is loaded...
public class BusModule : Module
{
protected override void Load(ContainerBuilder builder)
{
builder.Register(context =>
{
// Load the settings from the the busSettings class, which entail should come from the config file...
var busSettings = context.Resolve<BusSettings>();
var busControl = Bus.Factory.CreateUsingRabbitMq(cfg =>
{
cfg.Host(busSettings.HostAddress, h =>
{
h.Username(busSettings.Username);
h.Password(busSettings.Password);
});
});
busControl.Start();
return busControl;
})
.SingleInstance().AutoActivate().As<IBusControl>().As<IBus>();
}
}
My BusSettings class is then resolved but this is where I want the config file to be used to set up the properties, the issue is I don't know how to access the config file from there...
public class BusSettings
{
// I want to be able to get the values from here:
// But how do I access the config file declared in Main()??
var hostAddress = _config["AppSettings:HostAddress"];
//connecting to default vhost
public Uri HostAddress { get; } = new Uri(hostAddress);
//using default rabbitmq administrative user
public string Username { get; } = // Get config from file... ;
//using default rabbitmq administrative user password
public string Password { get; } = "";
public string QueueName { get; } = "";
//using IIS Express Development Certificate that has cn=localhost
public string SslServerName { get; } = "";
}
Does anyone know the correct way to do this?
You simply need to register
configBuilder.Build()
asIConfiguration
with Autofac and you're good to go. So it would look something like the following:With the BusSettings class implemented like this: