I have got below code in C# 2.0 and I am trying to implement IDisposable in my class.
using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
using Tridion.ContentManager;
using Tridion.ContentManager.Templating.Assembly;
using Tridion.ContentManager.Templating;
using Tridion.ContentManager.ContentManagement;
using Tridion.ContentManager.ContentManagement.Fields;
using Emirates.Tridion.BuildingBlocks.Base;
using th = my.Tridion.BuildingBlocks.Base.TemplateHelper;
using ut = my.Tridion.BuildingBlocks.Base.Utilities;
using tc = Tridion.ContentManager.CommunicationManagement;
using System.IO;
using System.Globalization;
using System.Threading;
namespace my.BuildingBlocks.Utilities
{
[TcmTemplateTitle("Page Metadata Values")]
public class PageMetaDataValues : TemplateBase, IDisposable
{
private bool m_Disposed = false;
protected bool Disposed
{
get
{
lock (this)
{
return (m_Disposed);
}
}
}
public override void Transform(Engine engine, Package package)
{
Initialize(engine, package);
m_Logger.Info("Start of Page Metadata Values");
tc.Publication pubObject= m_Engine.GetSession().GetObject(m_Publication.Id) as tc.Publication;
if (pubObject != null)
{
Thread.CurrentThread.CurrentCulture = new CultureInfo(ut.RenderPageLocale(pubObject));
}
package.PushItem("PageMetaDataValues", package.CreateStringItem(ContentType.Xml, RenderCurrentPageXML()));
m_Logger.Info("End of Page Metadata Values");
}
private string RenderCurrentPageXML()
{
m_Logger.Info("Rendering the Page Metadata Values");
XmlDocument pageDoc = new XmlDocument();
pageDoc.LoadXml(GetCurrentPageXML(m_Page.Id));
return pageDoc.InnerXml;
}
void IDisposable.Dispose
{
get
{
lock (this)
{
if (m_Disposed == false)
{
Cleanup();
m_Disposed = true;
GC.SuppressFinalize(this);
}
}
}
}
protected virtual void Cleanup()
{
/* do cleanup of unmanaged resources here */
}
#endregion
}
}
Please suggest whether I have implemnted IDisposable interface correclty or I need to do some code changes above.
That’s not the normal IDisposable pattern, typically you’d do something more like: