Generating Webassembly from pure C# class

Viewed 656

I'm making my backend on C# and frontend on JS.
I want to reuse some alghoritms written in C# in browser JavaScript.
Simplified example:

    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;
    }

Is it possible to compile one library-independent class to WebAssembly and use it from browser? How?

3 Answers

You can call .NET methods form JavaScript functions like this

Here is the razor html

@inject IJSRuntime JS

<button @onclick=@CallToJS >Call JS function</button>

Here is the code behind

 @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}";
    }
}

And this is the JavaScript code calling .NET method

function sayHi(dotNetHelper) {
    var promise = dotNetHelper.invokeMethodAsync('CalledFromJS', "Surinder");

    promise.then(function (result) {
        console.log(result);
    });    
}
Related