无法在.net core 3.1中注入依赖项

San*_*.91 0 c# dependency-injection .net-core asp.net-core asp.net-core-webapi

您好,我正在关注微软文档...

https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1#json-configuration-provider

为了在 .NET Core Web API 中将配置作为单例注入

这是我加载配置的Program.cs代码:

public class Program
{
    public static Dictionary<string, string> arrayDict =
   new Dictionary<string, string>
   {
        {"connString", "Data Source =xxx/xxx;User Id =xxx;Password =xxx"}
   };
    public static void Main(string[] args)
    {
        CreateHostBuilder(args).Build().Run();
    }

    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(builder =>
        {
            builder.AddInMemoryCollection(arrayDict);
            builder.AddJsonFile(
                "appsettings.json", optional: false, reloadOnChange: false);
        })
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });
}
Run Code Online (Sandbox Code Playgroud)

在Startup.cs中我使用以下内容

public class Startup
{
    private readonly IConfiguration Configuration;

    public Startup(IConfiguration config)
    {
        Configuration = config;
    }


    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddSingleton<IConfiguration>(Configuration);
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();

        app.UseRouting();

        app.UseAuthorization();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

尽管如此,当我在控制器中使用依赖项注入时,我无法注入 IConfiguration,并在调用控制器操作时出现以下错误(运行时错误):

无法找到类型“IrisDotNetCore.Controllers.LoginController”的合适构造函数。确保类型是具体的,并且为公共构造函数的所有参数注册了服务。

LoginController.cs代码:

[Route("api/[controller]")]
[ApiController]
public class LoginController : ControllerBase
{
    IConfiguration _configuration;


    LoginController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
}
Run Code Online (Sandbox Code Playgroud)

这里可能出了什么问题?

Tea*_*rth 5

您的构造函数必须是公共的或内部的 - 请记住,在您的情况下,无法创建 LoginController 的实例(因为LoginController方法是私有的)。甚至错误消息(确保类型是具体的并且为公共构造函数的所有参数注册了服务)也表明了这一点。