コード例 #1
0
        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));
                }
            }
        }
コード例 #2
0
ファイル: ClientContext.cs プロジェクト: tamirdresher/reaqtor
 public IAsyncReactiveQbserver <T> GetEgress <T>(string name) => GetObserver <string, T>(new Uri("reaqtor://shebang/observers/egress"))(name);