Я определил следующий DataContract
, который реализуетIDisposable
:
[DataContract]
public class RegularFileMetadata : FileMetadataBase, IDisposable
{
bool _Disposed = false; //note this!
//...
protected virtual void Dispose(bool disposing)
{
if (!_Disposed)
{
//...
_Disposed = true; //note this too!
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
}
И я вызываю следующий сервисный метод, передавая экземпляр вышеуказанного контракта данных:
[OperationContract]
[ServiceKnownType(typeof(RegularFileMetadata))]
Guid BeginUpload(FileMetadataBase metadata);
В реализации BeginUpload
я просто сохраняю метаданные в словаре как:
Dictionary<Guid, RegularFileMetadata> _Dict;
public Guid BeginUpload(FileMetadataBase fileMetadata)
{
//...
var metadata = fileMetadata as RegularFileMetadata;
Guid sessionId = Guid.NewGuid();
_Dict.Add(sessionId, metadata); //metadata SAVED!
return sessionId ;
}
Мой вопрос: сразу после возврата из этого метода, почему Dispose()
вызывается, хотя я сохранил экземпляр в словаре _Dict
?
Я проверил, что метод Dispose()
вызывается для того же экземпляра , который я сохранил в своем словаре, поскольку _Disposed
становится true
для сохраненного объекта, т.е. _Dict[sessionId]._Disposed
. ] становится true
!
Поведение службы моей службы установлено как:
[ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)]