VersionProvider.cs 2.0 KB

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