PlatformTools.cs 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Autofac;
  2. using InABox.Core;
  3. namespace InABox.Avalonia.Platform;
  4. public static class PlatformTools
  5. {
  6. private static ContainerBuilder _builder = new ContainerBuilder();
  7. private static IContainer? _container;
  8. private static IDeviceId? _deviceId;
  9. public static IDeviceId DeviceId
  10. {
  11. get
  12. {
  13. _deviceId ??= Resolve<IDeviceId,DefaultDeviceId>();
  14. return _deviceId;
  15. }
  16. }
  17. private static IAppVersion? _appVersion;
  18. public static IAppVersion AppVersion
  19. {
  20. get
  21. {
  22. _appVersion ??= Resolve<IAppVersion, DefaultAppVersion>();
  23. return _appVersion;
  24. }
  25. }
  26. private static IImageTools? _imageTools;
  27. public static IImageTools ImageTools
  28. {
  29. get
  30. {
  31. _imageTools ??= Resolve<IImageTools, DefaultImageTools>();
  32. return _imageTools;
  33. }
  34. }
  35. private static IPdfRenderer? _pdfRenderer;
  36. public static IPdfRenderer PdfRenderer
  37. {
  38. get
  39. {
  40. _pdfRenderer ??= Resolve<IPdfRenderer, DefaultPdfRenderer>();
  41. return _pdfRenderer;
  42. }
  43. }
  44. private static TInterface Resolve<TInterface, TDefault>() where TInterface : notnull, ILoggable where TDefault : TInterface, new()
  45. {
  46. _container ??= _builder.Build();
  47. var result = _container.IsRegistered<TInterface>()
  48. ?_container.Resolve<TInterface>()
  49. : new TDefault();
  50. result.Logger = Logger.Main;
  51. return result;
  52. }
  53. public static void Register<TInterface, TImplementation>()
  54. where TImplementation : TInterface
  55. where TInterface : notnull
  56. {
  57. _builder.RegisterType<TImplementation>().As<TInterface>();
  58. }
  59. }