类应该同时实现AsyncDisposable和IDisposable吗?

问题描述 投票:2回答:1

比如我有这样一个类。

public class UnitOfWork : IUnitOfWork
{
    private readonly ApplicationDbContext _context;

    public IProductRepository Products { get; private set; }
    public ICategoryRepository Categories { get; private set; }
    public IPhotoRepository Photos { get; private set; }

    public UnitOfWork(ApplicationDbContext context, IProductRepository productRepository,
        ICategoryRepository categoryRepository, IPhotoRepository photoRepository)
    {
        _context = context;
        Products = productRepository;
        Categories = categoryRepository;
        Photos = photoRepository;
    }

    public int Complete()
    {
        return _context.SaveChanges();
    }

    public Task<int> CompleteAsync()
    {
        return _context.SaveChangesAsync();
    }

    public void Dispose()
    {
        _context.Dispose();
    }

    public async ValueTask DisposeAsync()
    {
        await _context.DisposeAsync();
    }
}

有一个这样的接口

public interface IUnitOfWork : IDisposable, IAsyncDisposable
{
    IProductRepository Products { get; }
    ICategoryRepository Categories { get; }
    IPhotoRepository Photos { get; }
    int Complete();
    Task<int> CompleteAsync();
}

是否应该同时实现Async和Sync方法?另外,如果我在asp net core中使用DI,那么在处理过程中会调用什么方法呢?

c# asp.net-core dependency-injection idisposable unit-of-work
1个回答
1
投票

不管你的AspNetCore关注的是什么;是的,在一个类中同时实现同步和异步方法是完全可以的。

但是,拥有接口链(一个接口强制实现另一个接口)被认为是不干净的代码。

请看 这个

© www.soinside.com 2019 - 2024. All rights reserved.