Чтобы это работало, вам нужно, чтобы WrapperForMyOldApp реализовал IDisposable.
Вызов Dispose () в WrapperForMyOldApp сделает вашу очистку.
Однако статические объекты обычно используются для объектов, срок службы которых превышает один объект. В общем случае для этого типа использования вы должны сделать экземпляры ItemThatINeed нестатичными, сгенерировать их в конструкторе WrapperForMyOldApp, а затем очистить их в WrapperForMyOldApp.Dispose ().
Со статическими объектами вы потенциально создаете кошмар - вы создаете объект, а затем говорите, что хотите выполнить очистку (в конце блока using), поэтому метод Dispose () будет очищать до статических объектов. Однако, если они привыкнут снова, что должно произойти? Каково правильное поведение, если вы создаете два экземпляра WrapperForMyOldApp в 2 потоках? Я хотел бы рассмотреть эти вопросы, если вы хотите детерминированной очистки.