C# 使用从JS代码到静态Blazor方法的注入服务
我有一个应用程序,它使用jQuery库显示“确认”对话框 当用户单击对话框上的“OK”或“Cancel”时,首先对我的Javascript代码进行回调。在那里,我根据用户的决定调用Blazor方法 这一切看起来都是这样的: 我的js代码: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(
$('.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处理程序不同,这可能会导致一些其他问题,但上面的链接应该是一个很好的起点