Para dar algo de contexto, estoy tratando de conectar una aplicación C# existente con un React SPA. El problema es que el código C# incluye algunos cálculos matemáticos realmente difíciles y no puedo volver a escribirlo.
Mi idea era crear una aplicación Blazor WebAssembly, que incluyera el código base existente.
Después de innumerables horas de probar varias soluciones diferentes, descubrí que es posible copiar la carpeta "_framework" de Blazor (generada al compilar el proyecto) en mi carpeta pública de React. Esto me permitió llamar a métodos C# estáticos desde mi código JavaScript. Todo bien hasta ahora, pero desafortunadamente no es posible llamar a métodos no estáticos.
Según este artículo , debería ser posible enviar la instancia de C# a través de IJSRuntime, pero esto no funciona en mi caso. Desde mi perspectiva, parece que IJSRuntime no se inyecta porque el código JavaScript no forma parte de Blazor.
¿Alguien sabe alguna solución para inyectar el IJSRuntime con el entorno React? ¿O hay alguna solución mejor para llamar al código C# desde una aplicación React?
En lugar de pasar por todas estas cosas, ¿por qué no usar una API REST simple? Simplemente puede implementar un punto final que acepte los parámetros (a través de HTTP) y devuelva el resultado. En la mayoría de los casos, esto es mucho más fácil de configurar y mantener que otros enfoques posibles.
Simplemente agregue:
app.UseEndpoints(endpoints => { endpoints.MapControllers(); });Luego simplemente cree su controlador, que acepta sus servicios no estáticos en el constructor (a través de la inyección de dependencia) que hace los cálculos y devuelve los valores:
[ApiController] class MathController : ControllerBase { private readonly MyCalculatorService calculator; MathController(MyCalculatorService calculator) { this.calculator = calculator; } [HttpPost("api/math/my-math")] public async Task<ActionResult<MathResult>> MyMathEndpoint([FromBody] MathInput mathInput) { var result = calculator.GetResult(mathInput); return new JsonResult(result); } } MathInput y MathResult son solo ejemplos, pero realmente puede usar casi cualquier cosa.