IAsyncDisposable、パターンマッチだから、別にIAsyncDisposableインターフェースを実装してなくてもいい説、半分正解で半分誤りでした。

以前書いた記事

creatiovitae.hatenadiary.com

IAsyncDisposable、パターンマッチだから、別にIAsyncDisposableインターフェースを実装してなくてもいい説、半分正解で半分誤りでした。

結論から言うと、

        await using var productService = new ProductService();

みたいに、普通にawait using でInstance生成する場合にはパターンマッチングが機能します。

なので、クラスに、

        public async ValueTask DisposeAsync() {

がいれば、await usingって書けます。

逆にASP.NET CoreのDIContainerに登録して使う場合は、パターンマッチングだとだめで、IAsyncDisposableを実装している必要があります。(2019年12月3日時点)

なので、DIから挿してもらう場合はIAsyncDisposableの実装が現状必要です。 ASP.NET CoreはDI管理が前提で作られてるWeb Frameworkのはずなのでこの辺パターンマッチングでどうにかなりませんかね?

インターフェースを付けないほうが処理上のペナルティーもないはずなので何卒対応頂けると嬉しいというお気持ち。