这个 IDisposable 是否从被正确处理的函数中返回?

Is this IDisposable returned from a function being disposed of properly?

我有一个 class,它使用 SqlConnection 执行数据访问,众所周知,它实现了 IDisposable,应该在 finally 块中或通过 using 语句处理.我在使用块中有它们,但我的 IDisposable 实际上是在一个单独的函数中创建的。像这样:

public class DataRepository
{
    private readonly SqlConfiguration _configuration;

    public DataRepository(SqlConfiguration configuration)
    {
        _configuration = configuration;
    }

    public void Save(Model someModel)
    {
        using(var connection = CreateSqlConnection())
        {
            // Use connection here
        }
    }

    public Model Get(int id)
    {
        using(var connection = CreateSqlConnection())
        {
            // Use connection here
        }
    }

    private SqlConnection CreateSqlConnection()
        => new SqlConnection(_configuration.ConnectionString);
}

如您所见,我已经使用语句处理我所有的 SqlConnection。在 using 语句之外没有地方调用 CreateSqlConnection 。但是,我正在使用 Code Cracker Roslyn Analyzers,它在我的 CreateSqlConnection 中给我一个 CC0022 警告:

SqlConnection should be disposed.

我是否已妥善确保我的 SqlConnection 得到处理?在这种情况下,代码分析器是否不正确?

看起来这是 Code Cracker 工作人员深思熟虑的决定。通常无法知道对象的整个生命周期,因此他们提出了 CC0022 诊断。在他们的错误跟踪器上查看 this discussion

很明显,在这种情况下,您可以知道该对象的所有调用的生命周期,但它可能在代码分析器中实现它被认为只是一步太多了.. .