ConfigurationModule传递到模块和上下文中-DotNet Core [英] ConfigurationModule passed into Module and context - DotNet Core

查看:296
本文介绍了ConfigurationModule传递到模块和上下文中-DotNet Core的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

因此,我尝试使用Autofac DI通过堆栈传递配置json文件.我的主要功能如下:

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();
}

我已经在这里成功注册了模块...接下来,我的BusModule已加载...

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>();
    }
}

然后解决了我的BusSettings类,但这是我要使用配置文件来设置属性的地方,问题是我不知道如何从那里访问配置文件...

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?

推荐答案

您只需要在Autofac上将configBuilder.Build()注册为IConfiguration,就可以了.因此,它看起来类似于以下内容:

You simply need to register configBuilder.Build() as IConfiguration with Autofac and you're good to go. So it would look something like the following:

class Program
{
    static void Main(string[] args)
    {
        var configBuilder = new ConfigurationBuilder();
        configBuilder
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json");

        var config = configBuilder.Build();

        var containerBuilder = new ContainerBuilder();
        containerBuilder.Register(context => config).As<IConfiguration>();
        containerBuilder.RegisterType<BusSettings>();
        var container = containerBuilder.Build();

        var busSettings = container.Resolve<BusSettings>();

        Console.WriteLine(busSettings.HostAddress.ToString());
        Console.Read();
    }
}

使用这样实现的BusSettings类:

With the BusSettings class implemented like this:

public class BusSettings 
{
    private readonly IConfiguration _configuration;

    public BusSettings(IConfiguration configuration)
    {
        _configuration = configuration;
    }

    public Uri HostAddress => new Uri(_configuration["AppSettings:HostAddress"]);
}

这篇关于ConfigurationModule传递到模块和上下文中-DotNet Core的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆