m3th0dman ha mostrato il principio generale, ma la sua soluzione non si adatta al problema come ho capito, dal momento che i nomi dei metodi mi fanno pensare che CallMeDuringAPplicationLifecycle
possa essere chiamato più volte.
In C #, una risorsa che ha bisogno di pulizia (come il lavaggio dei buffer o la chiusura delle connessioni) dovrebbe usare l'implementazione IDisposable
.
interface IConnectionFactory
{
IConnection connect(); // This is CallMeFirst
}
interface IConnection : IDisposable
{
void send(); // This is CallMeDuringApplicationLifecycle
}
// And the Dispose() method of IDisposable is CallMeOnApplicationExit.
In questo modo, imponi che CallMeFirst
venga chiamato per primo, perché non c'è altro modo per ottenere un IConnection
. E poiché i programmatori C # riconoscono IDisposable
, sanno che devono chiamare Dispose
quando hanno terminato la connessione. In realtà non è possibile applicarlo in C #, quindi è il più vicino possibile. (Puoi anche scrivere un finalizzatore che controlli che sia stato chiamato Dispose
, ma non puoi fare altro che registrare l'errore lì, e non c'è alcuna garanzia che i finalizzatori saranno chiamati.)