Я очень новичок в Орлеане и пытаюсь понять все с помощью зерен и т. Д.
Что я получил, так это то, что в своем файле 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'.