Ho bisogno di consumare dati da un servizio WCF, che li canalizza attraverso un flusso. I dati stessi sono contenuti di un file di archivio, quindi richiede una logica aggiuntiva, che sto dividendo in una classe separata.
Ora, normalmente, userei un paio di istruzioni% co_de nidificate, in questo modo:
// Inside class that does the retrieval
using (var client = new FooWcfServiceClient(endpointName))
{
// Some logic for specifying the request
using (var dataStream = client.SomeMethod(request))
{
// Consuming logic goes here
}
}
Ma non voglio che la mia classe di recupero dall'alto dipenda dalla classe che esegue il lavoro effettivo su using
.
Ma ciò significa che ho bisogno in qualche modo di passare un flusso aperto al di fuori del metodo sopra, senza chiudere la connessione.
La soluzione che ho trovato è semplicemente creare un decoratore come questo:
class DisposingStreamDecorator : Stream, IDisposable
e quindi semplicemente passa sia il client che lo stream originale nel decoratore, per essere smaltiti più tardi all'interno di dataStream
. Allo stesso tempo, tutti gli altri membri, ereditati da Dispose()
, vengono passati allo stream che avvolge.
Questa è una pessima decisione di progettazione? Ci sono problemi che non vedo?