繁体   English   中英

依赖注入 IApplicationEnvironment 错误

[英]Dependency Injection IApplicationEnvironment Error

一整天我都在努力让这个工作。

我正在通过此代码进行依赖注入:

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

    Configuration = builder.Build();
}

每次执行此代码时,都会出现以下错误:

在此处输入图片说明

我真的很生气,因为我无法让它工作,我对此一无所知。 我对 Asp.Net 和 C# 比较陌生,但这就是教程告诉我要做的。 大家知道我关于代码的问题是什么吗?


也许这有帮助。

#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);
}

我的调试邮件服务

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;
    }
}

有两种可能:

  1. 您在 project.json 中的 json 架构指向错误的地方。 我的是http://json.schemastore.org/project
  2. 您的智能感知可能会出现问题。 通常的visual studio重新启动在大多数情况下都有效,但如果没有,stackoverflow 有很多响应来解决这个问题。 只需搜索它。

正如您在下面看到的,智能感知工作正常并找到IApplicationEnvironment ,它存在于Microsoft.Extensions.PlatformAbstractions

应用环境

然而,幸运的是在 RC1 中,不再需要在Configuration()上包含ApplicationBasePath ,它存在于IApplicationEnvironment 这意味着它可以选择将IApplicationEnvironment注入到您的案例中的Startup中。 我的消息来源:这里这里

所以你可以像这样改变你的启动方法:

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

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

最后,请确保您没有任何版本不匹配,如果您在同一解决方案中包含beta8rc1-final软件包,肯定会导致问题。 既然您说您是 asp.net 的新手,并且还没有使用config.json ,那么告诉我您可能会将 beta 版本与 RC asp.net 核心版本混淆。 尽管您可以随意命名,但默认命名已更改为appsettings.json 因此,再次确保project.json文件中的包版本在同一版本上。

我希望这有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM