using System; using System.Collections.Generic; namespace Wayne.Lib { /// <summary> /// Provides a version for the application. /// </summary> public class VersionProvider : IVersionProvider { ///<summary> /// Constructor ///</summary> public VersionProvider() { ReleaseComponentVersion = new VersionNumber("0.0.0"); } ///<summary> /// Main component version for the running process. Should be set in code as early as possible in the program. ///</summary> public VersionNumber ReleaseComponentVersion { get; set; } private readonly Dictionary<object, VersionNumber> internalDictionary = new Dictionary<object, VersionNumber>(); private readonly object internalDictionaryLock = new object(); /// <summary> /// Gets the version for a sub component. /// </summary> /// <typeparam name="TVersionIdentifier"></typeparam> /// <param name="versionIdentifier"></param> /// <returns></returns> public VersionNumber GetVersion<TVersionIdentifier>(TVersionIdentifier versionIdentifier) { VersionNumber result; lock (internalDictionary) { if (internalDictionary.TryGetValue(versionIdentifier, out result)) return result; return new VersionNumber("0.0.0"); } } ///<summary> /// Sets the version for a sub component ///</summary> ///<param name="versionIdentifier"></param> ///<param name="versionNumber"></param> ///<typeparam name="TVersionIdentifier"></typeparam> public void SetVersion<TVersionIdentifier>(TVersionIdentifier versionIdentifier, VersionNumber versionNumber) { lock (internalDictionaryLock) { internalDictionary[versionIdentifier] = versionNumber; } } } }