Dupa ce m-am batut cu referintele COM ( care mor imediat daca e proiect consola, dar care mai traiesc daca e ASP.NET) am reusit sa implementez IDisposable peste (aproape) fiecare obiect de la Excel.
Astfel incit am un Range_Disposable care inglobeaza / deriveaza din
Range, un WorkSheet_Disposable care inglobeaza/deriveaza din Worksheet
( si la care metoda get_Range intoarce Range_Disposable).
Observatie 1.
In proiectul consola, daca inchid Excel ( app.Quit(); Marshal.ReleaseComObject()) si am citeva Range_Disposable la care nu am aplicat Dispose, atunci app.Quit le apeleaza si pe ele.
In proiectul ASP.NET , daca fac acelasi lucru, app.Quit da Access Denied…
Observatia 2.
Totul se poate repara usor , folosind binecunoscutul using(Range_Disposable r = W.get_range())