Net Core:从Autofac模块访问appsettings.json的值

11

AspNet Core 应用程序

1)Autofac 模块类似于这样

public class AutofacModule : Module
{
    protected override void Load(ContainerBuilder builder)
    {
      //Register my components. Need to access to appsettings.json values from here
    }
}

2) 步骤1中的模块已在 Startup.cs 中注册。

public void ConfigureContainer(ContainerBuilder builder)
    {
       builder.RegisterModule(new AutofacModule());
    }

如何从 AutofacModule 中访问 appsettings.json 的值?我需要在 AutofacModule 中创建对象并将其用于依赖注入。

2个回答

6
需要更改第2步骤。
        public void ConfigureContainer(ContainerBuilder builder)
    {
        //get settigns as object from config
        var someSettings= Configuration.GetSection(typeof(SomeSettings).Name).Get<SomeSettings>();                                                    
        //put settings into module constructor 
        builder.RegisterModule(new AutofacModule(someSettings));
    }

我不知道这是否是“最佳实践”方式,但它可以运行。


0

目前也在尝试这个。

首先需要获取必要的NuGet包,并将它们作为using语句添加到类的顶部。

using Microsoft.Extensions.Configuration.Json;
using Autofac;
using Autofac.Configuration;
using Autofac.Extensions.DependencyInjection;

在你的 Program.cs Main 或 Startup.cs 中...
public static IContainer Container { get; set; }

Main() or Startup()
{

// 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 anything else you need to...

Container = containerBuilder.Build();
}

这将把配置模块注册到您的autoFac容器中,之后您就可以使用构造函数注入来传递它...

public class YourController
{
    private readonly IContainer _config;

    public YourController(IContainer configuration)
    {
        // Use IContainer instance
        _config = configuration;
    }

希望这有所帮助,如果您通过其他方式得到了更好的解决方法,请分享。


1
@Cris,您能否提供一个示例,说明如何根据您上面的回复注入IConfiguration。因为在我的情况下,RegisterModule没有任何效果。 - Trinitron
@ Trinitron 同意。我觉得可能我也误解了这里使用 IContainer 的方法。它不应该是 IConfiguration 吗? - theyetiman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接