我创建了一个像这样的服务:
builder.Services.AddSingleton<ISessionManagerService, SessionManagerService>();
并且可以在我的集线器中用它作为参数创建新方法,就像这样:
public async Task Send(string action, object args, ISessionManagerService sessionManager)
{
await Clients.All.Receive(action, args);
}
但是,当我覆盖
OnConnectedAsync
时,我无法添加 ISessionManagerService
作为参数。我尝试过 OnConnectedAsync(ISessionManagerService sessionManager)
和 OnConnectedAsync([FromServices] ISessionManagerService sessionManager)
,但都不起作用(错误是“没有找到合适的方法来覆盖”)。
在
OnConnectedAsync
方法中访问我的服务的正确方法是什么?
OnConnectedAsync
的 DI 可以在 Hub 构造函数中完成。例如:
private ISessionManagerService sessionManager;
public MiddlewareHub(ISessionManagerService sessionManager)
{
this.sessionManager = sessionManager;
}
虽然此方法有效,但它并不像 Hub 中的新方法那样干净和简单。如果谁有更好的方法,请分享。