AceEditorJsInterop.cs 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. using Microsoft.JSInterop;
  2. using System;
  3. using System.Runtime.CompilerServices;
  4. using System.Threading.Tasks;
  5. namespace BlazorAceEditor
  6. {
  7. internal class AceEditorJsInterop : IAsyncDisposable
  8. {
  9. private readonly Lazy<Task<IJSObjectReference>> _aceModuleTask;
  10. public AceEditorJsInterop(IJSRuntime jsRuntime)
  11. {
  12. _aceModuleTask = new(() => jsRuntime.InvokeAsync<IJSObjectReference>(
  13. "import", "./js/blazorAceEditor.js").AsTask());
  14. }
  15. public async Task InvokeVoidP1(string elementId, object arg0, [CallerMemberName] string methodName = null)
  16. {
  17. var module = await _aceModuleTask.Value;
  18. await module.InvokeVoidAsync(methodName ?? throw new ArgumentNullException(nameof(methodName)), elementId, arg0);
  19. }
  20. public async Task InvokeVoid(string elementId, [CallerMemberName] string methodName = null)
  21. {
  22. var module = await _aceModuleTask.Value;
  23. await module.InvokeVoidAsync(methodName ?? throw new ArgumentNullException(nameof(methodName)), elementId);
  24. }
  25. public async ValueTask<T> Invoke<T>(string elementId, [CallerMemberName] string methodName = null)
  26. {
  27. var module = await _aceModuleTask.Value;
  28. return await module.InvokeAsync<T>(methodName ?? throw new ArgumentNullException(nameof(methodName)), elementId);
  29. }
  30. public async ValueTask<T> InvokeP1<T>(string elementId, object arg0, [CallerMemberName] string methodName = null)
  31. {
  32. var module = await _aceModuleTask.Value;
  33. return await module.InvokeAsync<T>(methodName ?? throw new ArgumentNullException(nameof(methodName)), elementId, arg0);
  34. }
  35. public async ValueTask DisposeAsync()
  36. {
  37. if (_aceModuleTask.IsValueCreated)
  38. {
  39. var module = await _aceModuleTask.Value;
  40. await module.DisposeAsync();
  41. }
  42. }
  43. }
  44. }