【发布时间】:2019-07-16 08:07:06
【问题描述】:
我对奥尔良很陌生,并试图用谷物等掌握一切。
我得到的是在我的 startup.cs 文件中我像这样添加 SignalR
public IServiceProvider ConfigureServices(IServiceCollection services)
{
Program.WriteConsole("Adding singletons");
services
.AddSingleton(achievementManager)
.AddMvc();
services.AddSingleton(SignalRClient);
return services.BuildServiceProvider();
}
到目前为止一切都很好,我可以启动我的主机/应用程序,它应该连接到 SignalR。但是我无法理解的是我如何才能把它归结为我的粮食?如果我有一个控制器,我会在启动时简单地将它发送到构造函数中,但是我如何用谷物做到这一点?或者我什至可以这样做。任何指导表示赞赏。
在谷物中,我想做这样的事情
[StatelessWorker]
[Reentrant]
public class NotifierGrain : Grain, INotifierGrain
{
private HubConnection SignalRClient { get; }
public NotifierGrain(HubConnection signalRClient)
{
SignalRClient = signalRClient;
SignalRClient.SendAsync(Methods.RegisterService, Constants.ServiceName);
}
public Task NotifyClients(object message, MessageType type)
{
var registerUserNotification = (RegisterUserNotificationModel)message;
SignalRClient.SendAsync(Methods.RegisterUserToMultipleGroups, registerUserNotification.UserId, registerUserNotification.InfoIds);
}
return Task.CompletedTask;
}
然后我尝试像这样从另一个谷物调用 Notify 方法
var notifier = GrainFactory.GetGrain<INotifierGrain>(Constants.NotifierGrain);
await notifier.NotifyClients(notification, MessageType.RegisterUser);
但是尝试这样做最终会出现这样的错误
InvalidOperationException: Unable to resolve service for type 'Microsoft.AspNetCore.SignalR.Client.HubConnection' while attempting to activate 'User.Implementation.Grains.NotifierGrain'.
【问题讨论】:
标签: dependency-injection signalr orleans