Chr*_*ian 3 .net aop code-injection
在.NET中实现IDisposable模式的一部分是检查对象是否在所有方法/属性中处理,如下所示:
void SomeMethod()
{
if (Disposed)
throw new ObjectDisposedException("Object already disposed", (Exception)null);
...
}
Run Code Online (Sandbox Code Playgroud)
我没有使用这种管道代码来混淆代码,而是想要一个轻量级工具,它可以在构建IDIposable模式的所有类的后构建步骤中注入它.有什么建议?
不要在Dispose()方法中编写这样的代码.不止一次地处理对象不是逻辑错误.它实际上经常发生,传递给StreamReader的FileStream是一个经典的例子.
using (var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) {
using (var sr = new StreamReader(fs)) {
// etc..
}
}
Run Code Online (Sandbox Code Playgroud)
该FS对象被布置在这里的两倍.如果有任何例外,避免这种情况会造成麻烦.
如果你实际上并没有像你的问题那样谈论"实现Dispose模式",而只是想检查对象是否被处置的任何方法:保持它KISS:
private bool CheckDisposed() {
if (this.disposed) throw new ObjectDisposedException();
}
Run Code Online (Sandbox Code Playgroud)
或者只是将其写入内联.不需要在异常消息中添加任何措辞.例外很清楚,只意味着一件事.当然,这种异常只能在调试会话和单元测试中发挥作用.向它投掷AOP武器并非不可能,但也许有点笨拙.当属性仅替换一行代码时,很难获得成功.不要在Dispose()方法中注入它:)
| 归档时间: |
|
| 查看次数: |
277 次 |
| 最近记录: |