Ho una classe con questo campo:Perché il metodo Dispose() non è disponibile sul mio oggetto IDisposable?
private WcfChannelFactory<IPrestoService> _channelFactory;
Nel metodo Dispose()
, sto facendo questo:
if (_channelFactory != null) { _channelFactory.Dispose(); }
Ma che produce un errore:
Cannot access explicit implementation of IDisposable.Dispose
Dopo aver fatto alcuni research, sembra che io possa disporre in questo modo:
if (_channelFactory != null) { (_channelFactory as IDisposable).Dispose(); }
Non capisco due cose:
Perché non
Dispose()
è disponibile?WcfChannelFactory<T>
deriva daChannelFactory<T>
, che deriva daChannelFactory
, che implementaIDisposable
. Eppure loChannelFactory
non ha un metodoDispose()
. Com'è possibile?Se potessi (dovrebbe?) Semplicemente chiamare
Close()
su_channelFactory
, perché lo stato non la documentazione XML cheClose()
sarà anche chiamareDispose()
? Forse non lo farà? Questo è confusionario.
Così come faccio a smaltire '_channelFactory'? Dovrei chiamare 'Close()'? Dovrei chiamare 'Dispose()'? –
@Bob, non importa. Ho letto male la tua domanda originale Sembra che tu stia implementando il tuo schema monouso. –
@AnthonyPegram Non posso. Il metodo restituisce '_channelFactory'. Il consumatore sta avvolgendo la chiamata in un 'using', quindi la mia classe deve implementare' IDiposable' e dipingerne. –