невозможно ввести зависимость в. net core 3.1 - PullRequest
0 голосов
/ 20 февраля 2020

Привет, я слежу за документами Microsoft ...

https://docs.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>();
        });
}

Здесь, в 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();
        });
    }
}

Тем не менее, когда я использую внедрение зависимостей в моем контроллере, я не могу внедрить IConfiguration и получаю следующую ошибку при вызове действия cotroller (ошибка времени выполнения):

Подходящий конструктор для типа 'IrisDotNetCore.Controllers.LoginController' не найден. Убедитесь, что тип является конкретным, и службы зарегистрированы для всех параметров конструктора publi c.

LoginController.cs Код:

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


    LoginController(IConfiguration configuration)
    {
        _configuration = configuration;
    }
}

Что возможно здесь что-то не так?

1 Ответ

3 голосов
/ 20 февраля 2020

Ваш конструктор должен быть общедоступным c или внутренним - помните, что в вашей ситуации невозможно создать экземпляр LoginController (поскольку метод LoginController является закрытым). Даже сообщение об ошибке (убедитесь, что тип конкретный, а службы зарегистрированы для всех параметров конструктора publi c) предлагает это.

...