C# 默认项目依赖项处理不一致
在Visual Studio 2017中创建新的ASP.NET核心项目后,我们得到了两个控制器: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)
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容器(上面提到的相互依赖性就是原因)。