Подтвердить что ты не робот

Идентификация зависимостей IApplicationEnvironment Error

Весь день я пытаюсь заставить это работать.

Я делаю инъекцию зависимостей через этот код:

public Startup(IApplicationEnviroment appEnv)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(appEnv.ApplicationBasePath)
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();

    Configuration = builder.Build();
}

Каждый раз, когда я выполняю этот код, я получаю следующую ошибку:

введите описание изображения здесь

Меня это очень раздражает, потому что я не могу заставить его работать, и я понятия не имею. Я относительно новичок в Asp.Net и С#, но это то, как мне сказал учебник. Все знают, что моя проблема с кодом?


Возможно, это hepls.

#if DEBUG
        services.AddScoped<IMailService, DebugMailService>();
#else
        services.AddScoped<IMailService, RealMailService>();
#endif

Мой интерфейс:

public interface IMailService
{
    bool SendMail(string to, string from, string subject, string body);
}

Мой DebugMailService

public class DebugMailService : IMailService
{
    public bool SendMail(string to, string from, string subject, string body)
    {
        Debug.WriteLine($"Sending mail: To: {to}, Subject: {subject}");
        return true;
    }
}
4b9b3361

Ответ 1

Есть две возможности:

  • Ваша json-схема в project.json указывает на неправильное место. Мина http://json.schemastore.org/project
  • Ваш intellisense может создавать проблемы. Обычно перезапуск стандартной студийной студии работает, но если этого не происходит, у stackoverflow есть много ответов, чтобы исправить это. Просто найдите его.

Как вы можете видеть ниже, intellisense отлично работает и находит IApplicationEnvironment, который существует в Microsoft.Extensions.PlatformAbstractions.

IApplicationEnvironment

Однако, к счастью в RC1, его больше не требуется включать ApplicationBasePath в Configuration(), который существует в IApplicationEnvironment. Значение его необязательно для ввода IApplicationEnvironment в Startup для вашего случая. Мои источники: здесь и здесь.

Итак, вы можете просто изменить свой метод запуска следующим образом:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .AddJsonFile("appsettings.json")
        .AddEnvironmentVariables();

    Configuration = builder.Build().ReloadOnChanged("appsettings.json");
}

Наконец, убедитесь, что у вас нет никаких несоответствий в версии, это определенно вызовет проблемы, если вы включите beta8 с пакетами rc1-final в том же решении. Поскольку вы сказали, что новичок в asp.net, а также использование config.json, говорит, что вы можете вводить в заблуждение бета-версии с RC-версиями asp.net. Несмотря на то, что вы можете назвать его как хотите, имя по умолчанию было изменено на appsettings.json. Итак, убедитесь, что версии вашего пакета в файле project.json находятся в той же версии.

Надеюсь, это поможет.