【问题标题】:Constructor DI - Field is never assigned to, and will always have its default value构造函数 DI - 字段从未分配给,并且始终具有其默认值
【发布时间】:2017-08-29 21:53:22
【问题描述】:

我有以下代码:

private IMemoryCache _cache;

public HomeController(IMemoryCache memoryCache) : base() {    
   this._cache = memoryCache;    
}

ASP.Net Core 正在通过以下方式处理IMemoryCache 实例的注入:

public void ConfigureServices(IServiceCollection services) {
   services.AddMemoryCache();
}

它将_cache 字段标记为:

字段 HomeController._cache 从未分配给,并且将始终拥有 其默认值为 null

它不会导致任何错误,它只是在编辑器中分散注意力。

要让 Visual Studio 2017 相信我实际上是通过构造函数为该字段赋值的方法是什么?

代码(因为错误与它重叠):

编辑器显示错误:

在运行时显示被注入的有效实例:

编辑:

对于建议使用的cmets:

private IMemoryCache _cache = null;

...这没有区别,完全相同的结果。

【问题讨论】:

  • 好的,你用 IMemoryCache 参数调用 HomeController 构造函数。
  • 您可以在声明 private IMemoryCache _cache = null 时分配 null 这应该会删除警告
  • 我严重怀疑帖子中显示的代码会触发此警告。请确保您作为HomeController 的样本实际上是minimal reproducible example 的错误(它应该与DI 完全无关)。
  • @AlexeiLevenkov 截图添加,因为我也不会相信。
  • 您是否定义了任何其他未分配 _cache 的构造函数重载?

标签: c# asp.net-mvc asp.net-core


【解决方案1】:

重新启动 Visual Studio 2017 并重新启动并没有解决问题。

但是,当我安装了环境重新加载时,我收到了 Visual Studio 2017 更新版本 15.3.3 的通知。

在更新后重新启动 Visual Studio 后,这种情况不再发生。

我怀疑更新是否确实与此问题相关,更有可能是我的 VS 配置中的某些内容已关闭,更新将其恢复原状。

【讨论】:

    【解决方案2】:

    我在 VS2015 上遇到过同样的情况。就我而言,Build -> Rebuild Solution 解决了这个问题。

    【讨论】:

      【解决方案3】:

      清理您的解决方案应该可以解决这个问题。在 VS2017 菜单中:Project -> Clean Solution.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-13
        • 2022-01-14
        相关资源
        最近更新 更多