Also ich versuche Autofac DI zu verwenden, um meine Konfiguration JSON-Datei durch den Stapel zu übergeben. Meine Hauptfunktion ist wie folgt:ConfigurationModule in Modul und Kontext übergeben - DotNet Core
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();
}
ich erfolgreich die Module hier registriert haben ... weiter mein Busteilnehmers geladen ...
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>();
}
}
Meine BusSettings Klasse dann aufgelöst wird, aber das ist, wo ich will, dass die Konfigurationsdatei verwendet werden, um die Eigenschaften zu gründen, ist die Frage, die ich weiß nicht, wie die Konfigurationsdatei von dort zuzugreifen ...
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; } = "";
}
Kennt jemand den richtigen Weg, dies zu tun?
Ja das ist die richtige Lösung, landete ich mit dem eingebauten IServiceCollection Objekt und Anrufdienste. Konfigurieren Sie (configuration.GetSection ("Configuration")); und dann services.AddSingleton (Konfiguration); Dieser Ansatz ist jedoch sauberer. Ich finde es komisch, dass das RegisterModule (ConfigurationModule) so ziemlich nichts macht! –