private void TestTypes(IGenericHandlerInvoker invoker)
 {
     foreach (var type in _typesToLookup)
     {
         invoker.InvokeHandler <Task>(_serviceProvider, type.GetType(), new[] { type });
     }
 }
        public void TestInvoker(IGenericHandlerInvoker invoker)
        {
            var serviceMock = new Mock <ITestHandler <bool> >();

            serviceMock.Setup(x => x.HandleAsync(true)).Returns(Task.CompletedTask);

            var services = new ServiceCollection();

            services.AddSingleton(serviceMock.Object);
            var serviceProvider = services.BuildServiceProvider(false);

            for (var i = 0; i < 1000; i++)
            {
                invoker.InvokeHandler <Task>(serviceProvider, typeof(bool),
                                             new object[] { true });
            }


            serviceMock.Verify();
        }
        public GenericHandlerInvokerBenchmark()
        {
            var services = new ServiceCollection();

            services.AddScoped <ITestHandler <string>, TestHandler1>();
            services.AddScoped <ITestHandler <int>, TestHandler2>();
            services.AddScoped <ITestHandler <double>, TestHandler3>();
            services.AddScoped <ITestHandler <float>, TestHandler4>();
            services.AddScoped <ITestHandler <long>, TestHandler5>();
            _serviceProvider = services.BuildServiceProvider(false);

            _cachedReflect =
                new CachedReflectionInvoker(typeof(ITestHandler <>), nameof(ITestHandler <object> .HandleAsync));
            _compileExpression =
                new CompiledExpressionInvoker(typeof(ITestHandler <>), nameof(ITestHandler <object> .HandleAsync));
            _naiveReflect                = new ReflectionInvoker(typeof(ITestHandler <>), nameof(ITestHandler <object> .HandleAsync));
            _cachedCompileExpression     = new CachedCompiledExpressionInvoker(typeof(ITestHandler <>), nameof(ITestHandler <object> .HandleAsync));
            _prodCachedCompileExpression = new ProductionReadyCachedCompiledExpressionInvoker(typeof(ITestHandler <>), nameof(ITestHandler <object> .HandleAsync));
            _switchBaseline              = new SwitchBaselineInvoker();
        }