Mr.*_*tty 41 c# idisposable inversion-of-control unity-container
我终于在C#中围绕IoC和DI缠绕我的头,并且正在努力解决一些问题.我正在使用Unity容器,但我认为这个问题适用范围更广.
使用IoC容器来分配实现IDisposable的实例让我感到害怕!你怎么知道你应该Dispose()?该实例可能是专门为您创建的(因此您应该Dispose()它),或者它可能是其生命周期在其他地方管理的实例(因此您最好不要).代码中没有任何内容告诉您,实际上这可能会根据配置发生变化!这对我来说似乎是致命的.
任何IoC专家都可以描述处理这种模糊性的好方法吗?
Mik*_*nty 17
你绝对不想在注入你的类的对象上调用Dispose().你不能假设你是唯一的消费者.最好的办法是将非托管对象包装在某个托管界面中:
public class ManagedFileReader : IManagedFileReader
{
public string Read(string path)
{
using (StreamReader reader = File.OpenRead(path))
{
return reader.ReadToEnd();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,如果我试图将文本文件读入字符串,我会使用File.ReadAllText(path).
另一种方法是注入工厂并自己管理对象:
public void DoSomething()
{
using (var resourceThatShouldBeDisposed = injectedFactory.CreateResource())
{
// do something
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10839 次 |
| 最近记录: |