了解如何使用块处理对象

Understanding how using block dispose of objects

我有以下代码,我想在其中立即处理 ApplicationDbContext 个实例:

using (var context = ApplicationDbContext.Create())
{
    MyRepository myRespository = new MyRepository(context);
    myRepository.ReadData();
}

如果 C# 垃圾收集器想要立即处理 ApplicationDbContext,它也必须立即处理 MyRepository,因为它有对 ApplicationDbContext 的引用?这真的发生了吗?

或者我是否需要像下面这样编写我的代码以确保 ApplicationDbContext 立即被处置?

using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
    myRepository.ReadData();
}

你的第二段代码是正确的。

一个 using 子句应用于一个声明。

你在这里写了什么:

using (var context = ApplicationDbContext.Create())
using (MyRepository myRespository = new MyRepository(context))
{
  myRepository.ReadData();
}

等同于:

var context = ApplicationDbContext.Create();
try
{
  var myRespository = new MyRepository(context);
  try
  {
    myRepository.ReadData();
  }
  finally
  {
    myRepository.Dispose();
  }
}
finally
{
  context.Dispose();
}

这就是编译器为您生成的内容,因此您无需担心编写如此繁重且重复的内容,这可能是错误和错误的来源。

第一个代码中,myRespository没有配置