处理我只有接口的对象的正确方法是什么?

时间:2014-09-23 14:50:28

标签: c# interface idisposable

我有一个描述某种业务逻辑的接口,即

public interface IFoo
{
    void Bar();
}

我也有一些该接口的实现,例如

public class ConcreteFoo1 : IFoo
{
    public void Bar() {...}
}

public class ConcreteFoo2 : IFoo, IDisposable
{
    public void Bar() {...}
    public void Dispose {...}
}

在客户端中,我现在通过依赖注入获取IFoo的实例 - 所以我不知道我得到了哪一个。但是当我得到ConcreteFoo2的一个实例并完成它时,我需要确保调用Dispose。

我想我有两个选择,但如果我有更多更好的选择,请纠正我。

  1. 让IFoo扩展IDisposable
    这并不好,因为它要求IFoo的所有实现也实现IDisposable。但它允许我使用using {...}语法。

  2. 要求所有客户检查IDisposable并在必要时进行调用。
    这将使实现更简单,但将责任转移到客户端,这必须做这样的事情

  3.     public void DoStuff()
        {
            IFoo foo = ....;
            //do stuff
    
            IDisposable disposable = foo as IDisposable;
            if(disposable != null)
            { 
                disposable.Dispose();
            }
        }
    

    是否有其他/更好的方法可以确保Dispose()被确定性地调用?这两种方法中的任何一种都有专业人士和对手吗?

0 个答案:

没有答案