using System; | |
using Spring.Context; | |
using Spring.Context.Support; | |
using Spring.Objects.Factory.Xml; | |
namespace Agility.Extras.Spring | |
{ | |
/// <summary> | |
/// A singleton implementation of the IHelper protocol, | |
/// using static methods and the Spring object factory. | |
/// </summary> | |
/// <remarks><p> | |
/// Since static methods are used here, as a convenience, | |
/// it is not possible to implement IHelper. | |
/// However, the same method signatures are otherwise used. | |
/// </p><p> | |
/// Of course, an alternative is to provide the Factory | |
/// method a singlton, and then obtain the Helpers | |
/// class from the Factory, but implementing the | |
/// IHelpers interface as a singleton seems simpler. | |
/// </p></remarks> | |
public class Objects | |
{ | |
private static string FILE = "/Objects.xml"; | |
private Objects() | |
{ | |
// private constructor prevents instantiation. | |
} | |
// ISSUE: Remove this kludge and adopt latest iBATIS approach. | |
private static string _rootDirectory = | |
AppDomain.CurrentDomain.BaseDirectory.Replace(@"\bin", "").Replace(@"\Debug", "").Replace(@"\Release", ""); | |
private static volatile IApplicationContext _Factory = null; | |
public static IApplicationContext Factory() | |
{ | |
if (_Factory == null) | |
{ | |
lock (typeof (XmlObjectFactory)) | |
{ | |
string foo = "file://" + _rootDirectory + FILE; | |
if (_Factory == null) // double-check | |
_Factory = new XmlApplicationContext(foo); | |
} | |
} | |
return _Factory; | |
} | |
} | |
} |