VersionProvider.cs 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. using System.Collections.Generic;
  2. namespace Wayne.Lib
  3. {
  4. /// <summary>
  5. /// Provides a version for the application.
  6. /// </summary>
  7. public class VersionProvider : IVersionProvider
  8. {
  9. ///<summary>
  10. /// Constructor
  11. ///</summary>
  12. public VersionProvider()
  13. {
  14. ReleaseComponentVersion = new VersionNumber("0.0.0");
  15. }
  16. ///<summary>
  17. /// Main component version for the running process. Should be set in code as early as possible in the program.
  18. ///</summary>
  19. public VersionNumber ReleaseComponentVersion { get; set; }
  20. private readonly Dictionary<object, VersionNumber> internalDictionary = new Dictionary<object, VersionNumber>();
  21. private readonly object internalDictionaryLock = new object();
  22. /// <summary>
  23. /// Gets the version for a sub component.
  24. /// </summary>
  25. /// <typeparam name="TVersionIdentifier"></typeparam>
  26. /// <param name="versionIdentifier"></param>
  27. /// <returns></returns>
  28. public VersionNumber GetVersion<TVersionIdentifier>(TVersionIdentifier versionIdentifier)
  29. {
  30. VersionNumber result;
  31. lock (internalDictionary)
  32. {
  33. if (internalDictionary.TryGetValue(versionIdentifier, out result))
  34. return result;
  35. return new VersionNumber("0.0.0");
  36. }
  37. }
  38. ///<summary>
  39. /// Sets the version for a sub component
  40. ///</summary>
  41. ///<param name="versionIdentifier"></param>
  42. ///<param name="versionNumber"></param>
  43. ///<typeparam name="TVersionIdentifier"></typeparam>
  44. public void SetVersion<TVersionIdentifier>(TVersionIdentifier versionIdentifier, VersionNumber versionNumber)
  45. {
  46. lock (internalDictionaryLock)
  47. {
  48. internalDictionary[versionIdentifier] = versionNumber;
  49. }
  50. }
  51. }
  52. }