如果我有一个相当标准的抽象类,它允许注入 IDisposable 实例。但是,从此类继承的某些类不应像其他类一样处置注入的存储库。显而易见的解决方案是有一个构造函数:
public abstract class WorkspaceViewModel : IDisposable
{
readonly bool _cascadeDisposeRepository;
protected WorkspaceViewModel(IRepository repository, bool cascadeDisposeRepository=true)
{
_repository = repository;
_cascadeDisposeRepository = cascadeDisposeRepository;
}
编辑:
我也有一个构造函数
protected WorkspaceViewModel()
:this(new RepositoryA(), true){}
结束编辑
protected virtual void Dispose(bool disposing)
{
if (!_disposed)
{
if (disposing)
{
if (_cascadeDisposeRepository) { _repository.Dispose(); }
.....
但是,我从未见过 IDisposable 以这种方式实现,并且想知道这是否是不好的做法(如果是,为什么,以及哪些其他解决方案更可取)。
谢谢你的想法。
编辑: 马克的评论让我意识到最好的实现可能没有无参数构造函数,强制从 WorkspaceViewModel 继承的任何类创建和处置自己的实例(并选择实现 IDisposable),同时从 WorkspaceViewModel 的实现接口中删除 IDisposable。