public void ExtensionUsingException() { var disposable = new ExtensionDisposable(); var d = Expression.Parameter(typeof(ExtensionDisposable), "d"); var disposer = Expression.Lambda <Action <ExtensionDisposable> >( ExpressionEx.Using( d, Expression.Block( Expression.Throw(Expression.New(typeof(TestUsingException))), Expression.Call(d, typeof(ExtensionDisposable).GetMethod("Touch")))), d).Compile(); Assert.False(disposable.Touched); Assert.False(disposable.Disposed); Assert.Throws <TestUsingException>(() => { disposer(disposable); }); Assert.False(disposable.RefInDisposed); Assert.False(disposable.Touched); Assert.True(disposable.Disposed); }
public static void Dispose(this ExtensionDisposable obj) { obj.UnderlyingDisposable.Dispose(); }