C# 使用从JS代码到静态Blazor方法的注入服务

C# 使用从JS代码到静态Blazor方法的注入服务,c#,.net-core,blazor,blazor-server-side,C#,.net Core,Blazor,Blazor Server Side,我有一个应用程序,它使用jQuery库显示“确认”对话框 当用户单击对话框上的“OK”或“Cancel”时,首先对我的Javascript代码进行回调。在那里,我根据用户的决定调用Blazor方法 这一切看起来都是这样的: 我的js代码: $('.alert-yesno).on('click', function() { // For simplicity I immediately call the Blazor method DotNet.invokeMethodAsync(

我有一个应用程序,它使用jQuery库显示“确认”对话框

当用户单击对话框上的“OK”或“Cancel”时,首先对我的Javascript代码进行回调。在那里,我根据用户的决定调用Blazor方法

这一切看起来都是这样的:

我的js代码:

$('.alert-yesno).on('click', function() {
    // For simplicity I immediately call the Blazor method
    DotNet.invokeMethodAsync('[Assembly name]', 'DoSomething')
                            .then(data => {
                                // do something...
                            });
});
Blazor页面:

@inject MyService MyService

<button class="alert-yesno">Show dialog</button>

@code
{
    [JSInvokable]
    public static async Task DoSomething()
    {
        // How to use the non static MyService here...?
    }
}
@injectmyservice-MyService
显示对话框
@代码
{
[可调用]
公共静态异步任务DoSomething()
{
//如何在这里使用非静态MyService。。。?
}
}
这一切都很好。Javascript部分调用我的Blazor方法。但是我如何从那里使用
MyService
?这将被注入到页面中。这很好,因为它使用依赖注入

我不想每次都从
static
方法中创建一个
新的
实例,因为这样我就失去了所有自动注入的依赖项

如何解决此问题?

有关更完整的示例,请参阅,但您可以通过调用

DotNetObjectReference.Create(myInstance);
然后javascript代码可以调用该对象上的实例方法。由于组件(以及注入其中的服务)的生命周期可能与jquery click处理程序不同,这可能会导致一些其他问题,但上面的链接应该是一个很好的起点