Xml ドキュメントを逆シリアル化し、そこからオブジェクトを作成する関数があります。
オブジェクトをキャッシュに保存して、xml からデータを取得する必要があるたびに xml を逆シリアル化する必要がないようにします。
public class XMLDeserializer
{
public event OnElementDeserialized OnElementDeserializedCallback;
public void DeserializeXml(string xmlPath)
{
// implementation
}
}
public class XMLDeserializerFacade
{
private static object _lockObject = new object();
private XMLDeserializer xmlDeserializer;
private ICacheProvider cacheProvider;
public XMLDeserializerFacade(XMLDeserializer xmlDeserializer, ICacheProvider cacheProvider)
{
this.xmlDeserializer = xmlDeserializer;
this.cacheProvider = cacheProvider;
xmlDeserializer.OnElementDeserializedCallback += delegate(object element)
{
cacheProvider.Add("uniqueKey", element);
// is here in lock as well or i have to lock it again?
};
}
public void DeserializeXml(string xmlPath)
{
lock(_lockObject)
{
xmlDeserializer.DeserializeXml(xmlPath);
// From here it will go to
// cacheProvider.Add("uniqueKey", element); callback
}
}
}
XMLをデシリアライズしたいときは、
XMLDeserializerFacade.DeserializeXml("file.xml")
私の質問は、コールバックlock
内でも使用する必要があるということですか?OnElementDeserializedCallback
ありがとうございました