我正在编写一个将数据导出到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
来处置它)或者有更好的方法来处理这个问题吗?
答案 0 :(得分:4)
来电者应负责资源。被调用的方法没有信息(也不应该有)所提供的对象是否会被其他人使用。因此,处理提供给方法的任何对象是一个错误的决定(例如,如果此对象的生命周期由依赖注入容器管理,该怎么办?)
答案 1 :(得分:1)
在这种情况下,我认为这归结为个人偏好。一般来说,我尝试遵循这些准则:
new
),那么它也应该负责释放它(例如Dispose
)