0
그래서 Autofac DI를 사용하여 구성 json 파일을 스택을 통해 전달하려고합니다. 다음과 같이 내 주요 기능은 다음과 같습니다 내 BusModule이로드 옆에 내가 성공적으로 ... 여기에 모듈을 등록ConfigurationModule이 모듈 및 컨텍스트에 전달됨 - DotNet 코어
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();
}
...
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>();
}
}
내 BusSettings 클래스는 다음 해결을하지만이 나는 곳이다 설정 파일의 속성을 설정하는 데 사용되고 싶어, 문제는 ... 내가 거기에서 설정 파일에 액세스하는 방법을 몰라
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; } = "";
}
사람이 작업을 수행 할 수있는 올바른 방법을 알고 있나요?
그래이 적합한 솔루션입니다, 나는 내장 IServiceCollection 객체와 호출 서비스에를 사용하여 끝났다. (configuration.GetSection ("Configuration"))을 구성하십시오. 그런 다음 services.AddSingleton (구성); 그러나이 방법은 더 깨끗합니다. 나는 RegisterModule (ConfigurationModule)이 거의 아무것도하지 않는다는 것을 이상하게 생각한다! –