谁应该处理一个流?被叫方法还是来电者?

时间:2016-11-11 13:42:08

标签: c# architecture

我正在编写一个将数据导出到Stream的API:

public interface IExporter<in T>
{
    Task ExportAsync(IEnumerable<T> inputs, Stream output);
}

可能各种IExporter实施将使用TextWriter / StreamWriter的形式,但我不想在界面上强制执行。

使用StreamWriter的主要问题是默认情况下会关闭基础流(我知道那里有构造函数,但它需要bufferSize,我可以继承StreamWriter但我也不喜欢它。

我应该只是&#34;拥有&#34;我的Stream实施中的IExporter(并通过处置我的StreamWriter来处置它)或者有更好的方法来处理这个问题吗?

2 个答案:

答案 0 :(得分:4)

来电者应负责资源。被调用的方法没有信息(也不应该有)所提供的对象是否会被其他人使用。因此,处理提供给方法的任何对象是一个错误的决定(例如,如果此对象的生命周期由依赖注入容器管理,该怎么办?)

答案 1 :(得分:1)

在这种情况下,我认为这归结为个人偏好。一般来说,我尝试遵循这些准则:

  1. 在应用程序的设计中保持一致
  2. 如果一个对象分配一个资源(例如new),那么它也应该负责释放它(例如Dispose
  3. 补充阅读