如何使用 .NET 5 应用程序中的 observablehq/plot?

How to use observablehq/plot from .NET 5 app?

我们的团队打算为此使用 JavaScript 库 observablehq/plot from an app written in C# and running on .NET 5. As a proof of concept, we were able to successfully use that library running in a separate process on Node.js. The downside of this approach is that we would need to implement all data serialization and inter-process communication ourselves, and we would need to bundle Node.js in our app installer. We are looking for an alternative approach that would not require Node.js, but instead would directly host V8 JavaScript engine in our .NET app. Currently, we are considering using ClearScript 包。虽然我们能够成功 运行 简单的 JavaScript 代码使用它,但我们发现 observablehq/plot 及其依赖项使用了一些存在于 Node.js,但在 ClearScript 中显然不可用(似乎 Node.js 在 JavaScript 中实现了其中一些 API,在 C++ 中实现了一些 API)。让这些实现可用于 ClearScript 运行ning 在 .NET 应用程序中看起来是一项重大任务,我目前无法估计其成本。

请问有没有人解决过相同或相似的问题,您推荐什么方法?有没有一种简单的方法可以让 observablehq/plot 运行ning 在 ClearScript 上使用所有必要的 API?我是否应该考虑在 .NET 应用程序中托管 Chromium/Edge 浏览器引擎?我还没有尝试过这个,但我认为这是可能的,因为我的理解(如果我错了请纠正我)是 WebView2 控件可以在 .NET 上的 WPF 应用程序 运行ning 中使用,它是使用 Chromium 和 V8 JavaScript 引擎实现的。您还有其他方法可以推荐吗?


更新: 应用程序 GUI 基于 Avalonia and SkiaSharp 构建。有可能最终我们会选择另一个图表库,也许,一个不是用 JavaScript 编写的。但我手头的任务是专门研究我们是否以及如何在我们的应用程序中使用 JavaScript 库,以 observablehq/plot 为例,并研究其功能和性能特征。

如果您正在构建 WPF 桌面应用程序,您应该尝试基于 WPF 的图表库来满足您的需求。

开源库:

  1. OxyPlot
  2. InteractiveDataDisplay
  3. ScottPlot 支持平移和缩放。

付费图书馆:

  1. Telerik RadChart
  2. DevExpress

有关 WPF charts 的更多信息,请参见 post。

如果您正在使用 Blazor WebAssembly

使用 jsRuntime 和 JSObjectReference 导入并调用您的 Javascript observablehp 库。

如果您正在使用 Xamarin.Forms,最好的专业图书馆可能是 SyncFusion:

  1. Syncfusion Charts

更新:

如上所述,Avalonia Framework 仅通过网络视图/嵌入式浏览器支持此功能。这里有 3 个选项:

  1. Cefnet 是 Chromium 嵌入式框架的 .NET CLR 绑定
  2. CefGlue同上
  3. WebView Avaloria-CefGlue

有关与 Avalonia 一起使用的更多有用工具和库,请参阅 Awesome Avalonia