Estoy haciendo mi backend en C# y frontend en JS.
Quiero reutilizar algunos algoritmos escritos en C# en el navegador JavaScript.
Ejemplo simplificado:
class Fibonacci { int Fib(int x) { if (x == 0) return 0; int prev = 0; int next = 1; for (int i = 1; i < x; i++) { int sum = prev + next; prev = next; next = sum; } return next; } ¿Es posible compilar una clase independiente de la biblioteca en WebAssembly y usarla desde el navegador? ¿Cómo?
Sí, con NativeAOT-LLVM ( https://github.com/dotnet/runtimelab/tree/feature/NativeAOT-LLVM ). Hay una pregunta similar con una respuesta completa en Compilación del proyecto C# en WebAssembly
Por lo que entiendo, C # necesita algún middleware/marco para convertirlo a wasm. Si su caso de uso no justifica Blazor, puede probar la plataforma UNO: https://github.com/unoplatform/Uno.Wasm.Bootstrap
Puede llamar a métodos .NET desde funciones de JavaScript como esta
Aquí está la navaja de afeitar html
@inject IJSRuntime JS <button @onclick=@CallToJS >Call JS function</button>Aquí está el código detrás
@code { /// <summary> /// This method calls javascript function with .net object reference parameter /// </summary> /// <returns>Awaitable task</returns> private async Task CallToJS() => await JS.InvokeVoidAsync("sayHi", DotNetObjectReference.Create(this)); /// <summary> /// This method is called from javascript /// </summary> /// <param name="name">some string parameter coming from javascript</param> /// <returns>Returns string</returns> [JSInvokable] public async Task<string> CalledFromJS(string name) { // Here you can call your class library return $"Hi {name}"; } }Y este es el código JavaScript que llama al método .NET
function sayHi(dotNetHelper) { var promise = dotNetHelper.invokeMethodAsync('CalledFromJS', "Surinder"); promise.then(function (result) { console.log(result); }); }