.NET Core Dependency Injection;Не удалось разрешить службу для типа «System.String» при попытке активировать службу - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть сервис и модель, чтобы получить параметр для его конструктора, а затем контроллер использует этот сервис.Я также использую внедрение зависимостей и не могу точно указать, как объявлять службу, потому что она требует параметра.Я уже изучал другие подобные вопросы, но ни один из ответов, похоже, не работает для меня.Я получаю сообщение об ошибке: «Не удалось разрешить службу для типа« System.String »при попытке активировать« authentication.Services.RDStationServices.RDStationService ».

Код, связанный с этим вопросом:

* 1004»*

Модель:

public class RDStationOptions
{
        public string Url { get; set; }
    }

Переменная среды:

"RDStationOptions": {
"Url": "https://www.rdstation.com.br/api/1.3/"}

Запуск:

public void ConfigureServices(IServiceCollection services)
    {
        var configOptionsRDStation = Configuration.GetSection(nameof(RDStationOptions));
        var _rdStationInstance = new RDStationService(configOptionsRDStation[nameof(RDStationOptions.Url)]);
        services.AddSingleton(_rdStationInstance);
}

Эта конфигурация внутри ConfigureServices являетсямоя последняя попытка сообщить строку конструктору, но я продолжаю получать ту же ошибку. Любые предложения, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 21 февраля 2019

Код, который вы разместили, работает как задумано.Я чувствую, что ваша ошибка вызвана другим кодом.Возможно, опубликуйте остальную часть вашей конфигурации.

Пример того, где я ожидал, что это произойдет:

services.AddSingleton(_rdStationInstance);

// Will NOT work, will created a scoped RDStationService and try to resolve string
services.AddScoped<IRDStationService, RDStationService>();
0 голосов
/ 21 февраля 2019

Попробуйте использовать Опции.

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/options?view=aspnetcore-2.2

Я думаю, что это будет лучшая идея

0 голосов
/ 21 февраля 2019

Поскольку вы используете ASP.NET Core, я предполагаю, что ваш Configuration экземпляр имеет тип IConfiguration.Это должно работать для вас:

public void ConfigureServices(IServiceCollection services)
{       
    var configOptionsRDStation = Configuration.GetSection("RDStationOptions : Url");
    var _rdStationInstance = new RDStationService(configOptionsRDStation.Value);
    services.AddSingleton(_rdStationInstance);
}

Если вы хотите использовать IOptions:

services.Configure<RDStationOptions>(Configuration.GetSection("RDStationOptions"));
services.AddOptions()
...