依赖注入在C# .Net Core中无法使用IConfiguration

8

我使用以下代码注入了IConfiguration:

 public class InjectorConfig
    {
        /// <summary>
        /// configuration for DI
        /// </summary>
        /// <param name="services"></param>
        /// <param name="configuration"></param>
        public static void Init(IServiceCollection services, IConfiguration configuration)
        {
            services.AddSingleton<IConfiguration>(provider => configuration);
            services.AddSingleton<AppSettingUtil>();
        }
}                             

当我在名为AppSettingUtil的类中使用此代码时,IConfiguration对象会引发空指针异常。

以下是我正在使用的代码:

public class AppSettingUtil
    {     
       public AppSettingUtil(IConfiguration configuration)
       {
          _configuration = configuration;
       }
       public IConfiguration Configuration { get; }
    }

在执行下面的函数时,我遇到了空指针异常。
 private static object GetDefault(string name)
    {
        if (_configuration[name] != null)
        {
            return Convert.ToInt32(_configuration[name]);
        }
        return null;
    }

执行此函数时,对象_configuration为空,因此会抛出空指针异常。

请给我们展示一个 MCVE - Steven
你是否设置了断点来确认 Init 方法是否被调用了? - Scott Hannen
我找到了问题,这只是一个愚蠢的错误。getDefault() 方法是一个静态方法,我正在使用类名调用它(即没有创建对象),因此构造函数没有被执行,_configuration 没有被初始化。感谢您的支持。 - SwapnilKumbhar
这个回答解决了你的问题吗?如何在asp.net core中获取IConfiguration实例? - Ian Kemp
在.NET 6中查看这个:https://dev59.com/QFd1hooBIXSAPYfQ73s_ - Ash K
2个回答

21

我在ASP.Net Core中使用这个,它对我有效:

public class Startup
{
    public Startup(IHostingEnvironment env , IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSingleton<IConfiguration>(provider => configuration);
        services.AddSingleton<AppSettingUtil>();
    }
}

6
这也可以按照以下方式完成:
(我在 .net core 控制台应用程序的主线程中执行了此操作)
public static void Main(string[] args)
        {

            IConfigurationBuilder configurationBuilder = new ConfigurationBuilder();
            // Duplicate here any configuration sources you use.
            configurationBuilder.AddJsonFile("AppSettings.json");
            IConfiguration configuration = configurationBuilder.Build();

            Program.token = configuration["token"];
            Program.guidID = configuration["guidID"];
            Program.kind = configuration["kind"];

我在这个stackoverflow问题中找到了解决方案。

对我有效,希望对你也有用。


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