public static void ConfigureGenericListenerExtensions(
     IStatelessServiceHostBuilderConfigurator configurator,
     TheoryItem.TheoryItemExtensionProvider extensions)
 {
     configurator.DefineGenericListener(
         listenerBuilder =>
     {
         listenerBuilder.ConfigureObject(c => ConfigureGenericListenerExtensions(c, extensions));
     });
 }
 public static void ConfigureEventSourceExtensions(
     IStatelessServiceHostBuilderConfigurator configurator,
     TheoryItem.TheoryItemExtensionProvider extensions)
 {
     configurator.SetupEventSource(
         eventSourceBuilder =>
     {
         eventSourceBuilder.ConfigureObject(c => ConfigureEventSourceExtensions(c, extensions));
     });
 }
        public static void ConfigureDelegateExtensions(
            IStatelessServiceHostBuilderConfigurator configurator,
            TheoryItem.TheoryItemExtensionProvider extensions)
        {
            configurator.DefineDelegate(
                delegateBuilder =>
            {
                delegateBuilder.ConfigureObject(c => ConfigureDelegateExtensions(c, extensions));
                delegateBuilder.ConfigureObject(
                    c =>
                {
                    var useDelegateInvoker = extensions
                                             .GetExtension <IUseDelegateInvokerTheoryExtension <IStatelessServiceDelegateInvocationContext> >();

                    var useDelegateEvent = extensions
                                           .GetExtension <IUseDelegateEventTheoryExtension <StatelessServiceLifecycleEvent> >();

                    var pickDependency = extensions.GetExtension <IPickDependencyTheoryExtension>();

                    c.UseDelegateInvoker(
                        (
                            @delegate,
                            provider) =>
                    {
                        @delegate = DelegateWrap.Create(
                            @delegate,
                            new Action <IServiceProvider>(
                                serviceProvider =>
                        {
                            foreach (var pickAction in pickDependency.PickActions)
                            {
                                pickAction(serviceProvider);
                            }
                        }));

                        var invoker = useDelegateInvoker.Factory(@delegate, provider);
                        return(new StatelessServiceHostDelegateInvokerDecorator(invoker));
                    });
                    c.UseEvent(useDelegateEvent.Event);
                });
            });
        }