我已经定义了以下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)]