如何在SignalR hub方法中使用Interface作为参数类型?

问题描述 投票:0回答:1

我有一个 SignalR 集线器 (

public class DatabaseHub : Hub
) 和一个实现接口 IDatabaseObject (
public class User : IDatabaseObject
) 的 User 类。

我想向

DatabaseHub
添加一个方法,该方法接受任何实现
IDatabaseObject
的类型作为参数。

我已经尝试过:

DatabaseHub.cs

public Task DoSomething (User user) { ... }

SomeFileOnClient.cs

User user = new User(...);
databaseHubConnection.InvokeAsync("DoSomething", user)

运行完美。

但是,当我将集线器方法更改为:

DatabaseHub.cs

public Task DoSomething (IDatabaseObject user) { ... }

SomeFileOnClient.cs

User user = new User(...);
databaseHubConnection.InvokeAsync("DoSomething", user)

它不运行。

我尝试更改服务器服务,但找不到正确的组合。

感谢您的帮助。

c# blazor signalr
1个回答
0
投票

我认为你遇到了反序列化和序列化问题。

你可以尝试使用如下所示的泛型吗:

public Task DoSomething<T>(T user) where T : IDatabaseObject
{
    // Your logic here
}

并从客户端调用此方法,如下所示:

User user = new User(...);
databaseHubConnection.InvokeAsync("DoSomething<User>", user);
© www.soinside.com 2019 - 2024. All rights reserved.