如何检查已处置的对象,并在已经处置的方法中抛出ObjectDisposedException

时间:2012-10-04 09:20:52

标签: c# .net design-patterns objectdisposedexception disposable

我有一个一次性类,它使用一次性模式实现IDisposalbe接口。为了维护约束,我需要确保在处理对象时,对任何公共方法的任何后续调用都会抛出ObjectDisposedException。显而易见的解决方案是检查bool值isDisposed并抛出异常。但是,我如何使用一些基于反射的解决方案(如果有任何或其他方法)自动将此约束应用于每个公共方法。我不想做的是在我拥有的每个方法中进行检查(即在每次调用之前我都不想调用IsObjectDisposed()方法)

除了我之前描述的实际应用之外,我需要知道一种自动调用方法的方法,假设Foo()为每个类的方法调用说MyClass

2 个答案:

答案 0 :(得分:2)

Imo,你有2个解决方案:

  • 或手动调用它们,因此代码实际上是每个public方法执行检查。

  • 或者可以使用Aspect Oriented Programming 函数调用注入到由某个属性标记的每个方法的开头。

答案 1 :(得分:0)

您是否考虑过在使用代码之前简单地执行空检查?

即。如果(空!=对象) {  做手术 }

或者您正在寻找某种对象包装器而不是使用virtual关键字?即使用统一使用方面或例如春天。这些允许您将Dependency Inject代码插入到您的应用程序中,并允许您通过代码库应用“横切关注点”,即安全性,日志记录,打印和边界检查。