public CounterFilter(FilterCounter counter) { _counter = counter; _counter.OnConnectedAsyncCount = 0; _counter.InvokeMethodAsyncCount = 0; _counter.OnDisconnectedAsyncCount = 0; }
public async Task FiltersHaveTransientScopeByDefault() { using (StartVerifiableLog()) { var counter = new FilterCounter(); var serviceProvider = HubConnectionHandlerTestUtils.CreateServiceProvider(services => { services.AddSignalR(options => { options.AddFilter <CounterFilter>(); }); services.AddSingleton(counter); }, LoggerFactory); var connectionHandler = serviceProvider.GetService <HubConnectionHandler <MethodHub> >(); using (var client = new TestClient()) { var connectionHandlerTask = await client.ConnectAsync(connectionHandler); await client.Connected.OrTimeout(); // Filter is transient, so these counts are reset every time the filter is created Assert.Equal(1, counter.OnConnectedAsyncCount); Assert.Equal(0, counter.InvokeMethodAsyncCount); Assert.Equal(0, counter.OnDisconnectedAsyncCount); var message = await client.InvokeAsync(nameof(MethodHub.Echo), "Hello world!").OrTimeout(); // Filter is transient, so these counts are reset every time the filter is created Assert.Equal(0, counter.OnConnectedAsyncCount); Assert.Equal(1, counter.InvokeMethodAsyncCount); Assert.Equal(0, counter.OnDisconnectedAsyncCount); Assert.Null(message.Error); client.Dispose(); await connectionHandlerTask.OrTimeout(); // Filter is transient, so these counts are reset every time the filter is created Assert.Equal(0, counter.OnConnectedAsyncCount); Assert.Equal(0, counter.InvokeMethodAsyncCount); Assert.Equal(1, counter.OnDisconnectedAsyncCount); } } }