WebDAVMethodHandlers.cs 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace Mtp2Dav.WebDAVSharp.Server._1d2086a502937936ebc6bfe19cfa15d855be1c31.MethodHandlers
  5. {
  6. /// <summary>
  7. /// This class contains code to produce the built-in
  8. /// <see cref="IWebDavMethodHandler" /> instances known by WebDAV#.
  9. /// </summary>
  10. internal static class WebDavMethodHandlers
  11. {
  12. private static readonly List<IWebDavMethodHandler> _BuiltIn = new List<IWebDavMethodHandler>();
  13. /// <summary>
  14. /// Gets the collection of built-in <see cref="IWebDavMethodHandler" />
  15. /// HTTP method handler instances.
  16. /// </summary>
  17. public static IEnumerable<IWebDavMethodHandler> BuiltIn
  18. {
  19. get
  20. {
  21. lock (_BuiltIn)
  22. {
  23. if (_BuiltIn.Count == 0)
  24. ScanAssemblies();
  25. }
  26. return _BuiltIn;
  27. }
  28. }
  29. /// <summary>
  30. /// Scans the WebDAV# assemblies for known <see cref="IWebDavMethodHandler" />
  31. /// types.
  32. /// </summary>
  33. private static void ScanAssemblies()
  34. {
  35. var methodHandlerTypes = from type in typeof (WebDavServer).Assembly.GetTypes()
  36. where !type.IsAbstract
  37. where typeof (IWebDavMethodHandler).IsAssignableFrom(type)
  38. select type;
  39. var methodHandlerInstances =
  40. from type in methodHandlerTypes
  41. select (IWebDavMethodHandler) Activator.CreateInstance(type);
  42. _BuiltIn.AddRange(methodHandlerInstances);
  43. }
  44. }
  45. }