是否真的需要.net core 2 API中的services.AddSingleton <IConfiguration>

Jaw*_*ikh 4 c# configuration .net-core asp.net-core-webapi asp.net-core-2.0

我在.NET Core 2 Web API Controller中访问了appsettings.json,只需添加以下内容:

public class MyController : Controller
    {
        private readonly IConfiguration appConfig;

        public MyController(IConfiguration configuration)
        {
            appConfig = configuration;
        }
    }
Run Code Online (Sandbox Code Playgroud)

在services.AddMvc();之后没有在Startup类的ConfigureServices(IServiceCollection服务)中添加以下内容:

services.AddSingleton<IConfiguration>(Configuration);
Run Code Online (Sandbox Code Playgroud)

我的方法有什么缺陷吗?在.Net Core 2配置部分的官方文档中,没有提及使用'AddSingleton'甚至没有一次:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration

也通过搜索我无法找到访问配置的相关内容! https://docs.microsoft.com/en-us/search/index?search=AddSingleton&scope=ASP.NET+Core

下面的链接显示AddSingleton,如同必须的步骤:

访问控制器类中的appsettings.json值

https://blogs.technet.microsoft.com/dariuszporowski/tip-of-the-week-how-to-access-configuration-from-controller-in-asp-net-core-2-0/

Fed*_*uma 10

正如ASP.NET Core 2.0官方路线图所说:

IConfiguration默认情况下,ASP.NET Core 2.0中会将一个实例添加到服务容器中,以便所有应用程序都可以通过容器轻松检索配置值

所以services.AddSingleton<IConfiguration>(或类似的)已经被框架本身调用.

您可能会在WebHostBuilder.cs文件内部或(在使用实用程序扩展方法时)HostBuilder.cs文件内部看到此行为.

  • 与ASP.NET Core DI中的任何其他注册一样,只要有人从`IServiceProvider`请求该服务,就会使用**last**注册.因为,在您的情况下,注册是相同的,没有任何变化(您现在有两个相同的注册相同的服务). (3认同)