public void Observer() { if (!typeof(IPoleEventHandler).IsAssignableFrom(EventHandlerType)) { throw new NotSupportedException($"{EventHandlerType.FullName} must inheritance from PoleEventHandler"); } eventHandler = EventHandler; //内部函数 Task EventHandler(byte[] bytes) { var(success, transport) = EventBytesTransport.FromBytes(bytes); if (!success) { if (Logger.IsEnabled(LogLevel.Error)) { Logger.LogError($" EventId:{nameof(EventBytesTransport.EventId)} is not a event"); } } // 批量处理的时候 grain Id 取第一个 event的id using (var scope = serviceProvider.CreateScope()) { var eventHandlerInstance = scope.ServiceProvider.GetRequiredService(EventHandlerType); var serializer = scope.ServiceProvider.GetRequiredService <ISerializer>() as ISerializer; var eventTypeFinder = scope.ServiceProvider.GetRequiredService <IEventTypeFinder>() as IEventTypeFinder; var loggerFactory = scope.ServiceProvider.GetRequiredService <ILoggerFactory>() as ILoggerFactory; var logger = loggerFactory.CreateLogger(EventHandlerType); return(GetObserver(EventHandlerType)(eventHandlerInstance, transport, serializer, eventTypeFinder, logger, EventHandlerType)); } } }
public IAsyncReactiveQbserver <T> GetEgress <T>(string name) => GetObserver <string, T>(new Uri("reaqtor://shebang/observers/egress"))(name);