Не удается получить конфигурацию после обновления с NetCore 2.2 до 3.1 - PullRequest
0 голосов
/ 26 февраля 2020

Таким образом, приведенный ниже код используется для работы в 2.2, но после обновления целевой платформы и пакетов nuget до 3.1 я получаю следующую ошибку в службах. Строка AddSingleton

System.ArgumentNullException: ' Значение не может быть нулевым. (Параметр 'creationInstance') '

Я добавил конфигурацию и классы обслуживания электронной почты.

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

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {

         services.AddSingleton<IEmailConfiguration>
            (Configuration.GetSection("EmailConfiguration").Get<EmailConfiguration>());
        services.AddTransient<IEmailService, EmailService>();

Настройки приложений

{

  "EmailConfiguration": {
    "SmtpServer": "smtp.office365.com",
    "SmtpPort": xxxx,
    "SmtpUsername": "xxxx",
    "SmtpPassword": "xxx"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

IEmailConfiguration

public interface IEmailConfiguration
{
    string SmtpServer { get; }
    int SmtpPort { get; }
    string SmtpUsername { get; set; }
    string SmtpPassword { get; set; }

    string PopServer { get; }
    int PopPort { get; }
    string PopUsername { get; }
    string PopPassword { get; }

    string SENDGRID_API_KEY { get; }
}
public class EmailConfiguration : IEmailConfiguration
{
    public string SmtpServer { get; set; }
    public int SmtpPort { get; set; }
    public string SmtpUsername { get; set; }
    public string SmtpPassword { get; set; }

    public string PopServer { get; set; }
    public int PopPort { get; set; }
    public string PopUsername { get; set; }
    public string PopPassword { get; set; }
    public string SENDGRID_API_KEY { get; set; }
}

1 Ответ

0 голосов
/ 26 февраля 2020

используйте эту настройку:

services.Configure<EmailConfiguration>(configuration.GetSection("EmailConfiguration"));

или

var myConfiguration = new EmailConfiguration();
Configuration.GetSection("EmailConfiguration").Bind(myConfiguration);
services.AddSingleton<IEmailConfiguration>(myConfiguration);
...