Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 默认项目依赖项处理不一致_C#_Asp.net Core_Visual Studio 2017 - Fatal编程技术网

C# 默认项目依赖项处理不一致

C# 默认项目依赖项处理不一致,c#,asp.net-core,visual-studio-2017,C#,Asp.net Core,Visual Studio 2017,在Visual Studio 2017中创建新的ASP.NET核心项目后,我们得到了两个控制器:AccountController和ManageController。这两个控制器都通过构造函数使用依赖项注入来获取ApplicationSignInManager和ApplicationUserManager AccountController的Dispose: protected override void Dispose(bool disposing) { if (disposing)

在Visual Studio 2017中创建新的ASP.NET核心项目后,我们得到了两个控制器:
AccountController
ManageController
。这两个控制器都通过构造函数使用依赖项注入来获取
ApplicationSignInManager
ApplicationUserManager

AccountController
Dispose

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (_userManager != null)
        {
            _userManager.Dispose();
            _userManager = null;
        }

        if (_signInManager != null)
        {
            _signInManager.Dispose();
            _signInManager = null;
        }
    }

    base.Dispose(disposing);
}
protected override void Dispose(bool disposing)
{
    if (disposing && _userManager != null)
    {
        _userManager.Dispose();
        _userManager = null;
    }

    base.Dispose(disposing);
}
ManageController
Dispose

protected override void Dispose(bool disposing)
{
    if (disposing)
    {
        if (_userManager != null)
        {
            _userManager.Dispose();
            _userManager = null;
        }

        if (_signInManager != null)
        {
            _signInManager.Dispose();
            _signInManager = null;
        }
    }

    base.Dispose(disposing);
}
protected override void Dispose(bool disposing)
{
    if (disposing && _userManager != null)
    {
        _userManager.Dispose();
        _userManager = null;
    }

    base.Dispose(disposing);
}

为什么不
ManageController
dispose登录管理器?根据Juan的评论,为什么它与AccountController不同


这看起来像是一个疏忽,但这并不重要,因为IoC容器应该处理所有依赖项,所以甚至可以完全删除dispose方法。

基于Juan的评论:


这看起来像是一个疏忽,但这并不重要,因为IoC容器应该处理所有依赖项,所以甚至可以完全删除dispose方法。

有趣的问题。我能够复制。我有根据地猜测可能是两个不同的开发人员。更有趣的是,
ApplicationSignInManager
依赖于
ApplicationUserManager
,因此如果有任何问题,这将使它处于不一致的状态(假设它是同一个对象)。不管怎样。我不喜欢这种处理方法,因为我认为对象的范围/生命周期应该由了解其实例化的人控制,在这种情况下,就是IoC容器(上面提到的相互依赖性就是原因所在)。有趣的问题。我能够复制。我有根据地猜测可能是两个不同的开发人员。更有趣的是,
ApplicationSignInManager
依赖于
ApplicationUserManager
,因此如果有任何问题,这将使它处于不一致的状态(假设它是同一个对象)。不管怎样。我不喜欢这种处理方法,因为我认为对象的作用域/生命周期应该由知道它的实例化的人控制,在这种情况下,就是IoC容器(上面提到的相互依赖性就是原因)。