private static void ConfigureGenericListenerExtensions(
            IServiceHostGenericListenerReplicaTemplateConfigurator configurator,
            TheoryItem.TheoryItemExtensionProvider extensions)
        {
            var useListenerEndpoint             = extensions.GetExtension <IUseListenerEndpointTheoryExtension>();
            var useGenericCommunicationListener = extensions.GetExtension <IUseGenericListenerCommunicationListenerTheoryExtension>();
            var useDependencies       = extensions.GetExtension <IUseDependenciesTheoryExtension>();
            var configureDependencies = extensions.GetExtension <IConfigureDependenciesTheoryExtension>();
            var pickDependency        = extensions.GetExtension <IPickDependencyTheoryExtension>();
            var pickListenerEndpoint  = extensions.GetExtension <IPickListenerEndpointTheoryExtension>();

            configurator.UseEndpoint(useListenerEndpoint.Endpoint);
            configurator.UseDependencies(useDependencies.Factory);
            configurator.UseCommunicationListener(
                (
                    context,
                    endpointName,
                    provider) =>
            {
                pickListenerEndpoint.PickAction(endpointName);

                foreach (var pickAction in pickDependency.PickActions)
                {
                    pickAction(provider);
                }

                return(useGenericCommunicationListener.Factory(context, endpointName, provider));
            });
            configurator.ConfigureDependencies(
                dependencies =>
            {
                configureDependencies.ConfigAction(dependencies);
            });
        }
        private static void ConfigureEventSourceExtensions(
            IServiceHostEventSourceReplicaTemplateConfigurator configurator,
            TheoryItem.TheoryItemExtensionProvider extensions)
        {
            var useDependencies = extensions.GetExtension <IUseDependenciesTheoryExtension>();
            var useEventSourceImplementation = extensions.GetExtension <IUseEventSourceImplementationTheoryExtension>();
            var configureDependencies        = extensions.GetExtension <IConfigureDependenciesTheoryExtension>();
            var pickDependency = extensions.GetExtension <IPickDependencyTheoryExtension>();

            configurator.UseDependencies(useDependencies.Factory);
            configurator.ConfigureDependencies(
                dependencies =>
            {
                configureDependencies.ConfigAction(dependencies);
            });
            configurator.UseImplementation(
                provider =>
            {
                foreach (var action in pickDependency.PickActions)
                {
                    action(provider);
                }

                return(useEventSourceImplementation.Factory(provider));
            });
        }
 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));
     });
 }
        private static void ConfigureDelegateExtensions(
            IServiceHostDelegateReplicaTemplateConfigurator configurator,
            TheoryItem.TheoryItemExtensionProvider extensions)
        {
            var useDelegate           = extensions.GetExtension <IUseDelegateTheoryExtension>();
            var useDependencies       = extensions.GetExtension <IUseDependenciesTheoryExtension>();
            var configureDependencies = extensions.GetExtension <IConfigureDependenciesTheoryExtension>();

            configurator.UseDependencies(useDependencies.Factory);
            configurator.UseDelegate(useDelegate.Delegate);
            configurator.ConfigureDependencies(
                dependencies =>
            {
                configureDependencies.ConfigAction(dependencies);
            });
        }
        private static void ConfigureAspNetCoreListenerExtensions(
            IServiceHostAspNetCoreListenerReplicaTemplateConfigurator configurator,
            TheoryItem.TheoryItemExtensionProvider extensions)
        {
            var useListenerEndpoint = extensions.GetExtension <IUseListenerEndpointTheoryExtension>();
            var useAspNetCoreListenerCommunicationListener = extensions.GetExtension <IUseAspNetCoreListenerCommunicationListenerTheoryExtension>();
            var useAspNetCoreWebHostBuilder = extensions.GetExtension <IUseAspNetCoreListenerWebHostBuilderTheoryExtension>();
            var configureDependencies       = extensions.GetExtension <IConfigureDependenciesTheoryExtension>();
            var pickDependency       = extensions.GetExtension <IPickDependencyTheoryExtension>();
            var pickListenerEndpoint = extensions.GetExtension <IPickListenerEndpointTheoryExtension>();

            configurator.UseEndpoint(useListenerEndpoint.Endpoint);
            configurator.UseWebHostBuilder(
                () => new WebHostBuilderDecorator(
                    useAspNetCoreWebHostBuilder.Factory(),
                    afterBuild: host =>
            {
                foreach (var pickAction in pickDependency.PickActions)
                {
                    pickAction(host.Services);
                }
            }));
            configurator.UseCommunicationListener(
                (
                    context,
                    endpointName,
                    factory) =>
            {
                pickListenerEndpoint.PickAction(endpointName);

                return(useAspNetCoreListenerCommunicationListener.Factory(context, endpointName, factory));
            },
                builder =>
            {
            });
            configurator.ConfigureWebHost(
                webHostBuilder =>
            {
                webHostBuilder.ConfigureServices(
                    dependencies =>
                {
                    configureDependencies.ConfigAction(dependencies);
                });
            });
        }
        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);
                });
            });
        }
        private static void ConfigureRemotingListenerExtensions(
            IServiceHostRemotingListenerReplicaTemplateConfigurator configurator,
            TheoryItem.TheoryItemExtensionProvider extensions)
        {
            var useListenerEndpoint = extensions.GetExtension <IUseListenerEndpointTheoryExtension>();
            var useRemotingCommunicationListener = extensions.GetExtension <IUseRemotingListenerCommunicationListenerTheoryExtension>();
            var useRemotingImplementation        = extensions.GetExtension <IUseRemotingListenerImplementationTheoryExtension>();
            var useRemotingSettings = extensions.GetExtension <IUseRemotingListenerSettingsTheoryExtension>();
            var useRemotingSerializationProvider = extensions.GetExtension <IUseRemotingListenerSerializerTheoryExtension>();
            var useRemotingHandler                = extensions.GetExtension <IUseRemotingListenerHandlerTheoryExtension>();
            var useDependencies                   = extensions.GetExtension <IUseDependenciesTheoryExtension>();
            var configureDependencies             = extensions.GetExtension <IConfigureDependenciesTheoryExtension>();
            var pickDependency                    = extensions.GetExtension <IPickDependencyTheoryExtension>();
            var pickListenerEndpoint              = extensions.GetExtension <IPickListenerEndpointTheoryExtension>();
            var pickRemotingImplementation        = extensions.GetExtension <IPickRemotingListenerImplementationTheoryExtension>();
            var pickRemotingSettings              = extensions.GetExtension <IPickRemotingListenerSettingsTheoryExtension>();
            var pickRemotingSerializationProvider = extensions.GetExtension <IPickRemotingListenerSerializationProviderTheoryExtension>();
            var pickRemotingHandler               = extensions.GetExtension <IPickRemotingListenerHandlerTheoryExtension>();

            configurator.UseEndpoint(useListenerEndpoint.Endpoint);
            configurator.UseDependencies(useDependencies.Factory);
            configurator.UseHandler(
                provider =>
            {
                pickRemotingImplementation.PickAction(provider.GetService <IService>());

                var handler = useRemotingHandler.Factory(provider);

                pickRemotingHandler.PickAction(handler);

                return(handler);
            });
            configurator.UseCommunicationListener(
                (
                    context,
                    build) =>
            {
                var options = build(context);

                pickListenerEndpoint.PickAction(options.ListenerSettings.EndpointResourceName);
                pickRemotingSerializationProvider.PickAction(options.MessageSerializationProvider);
                pickRemotingSettings.PickAction(options.ListenerSettings);

                return(useRemotingCommunicationListener.Factory(context, build));
            });
            configurator.UseImplementation(
                provider =>
            {
                foreach (var action in pickDependency.PickActions)
                {
                    action(provider);
                }

                return(useRemotingImplementation.Factory(provider));
            });
            configurator.UseSerializationProvider(useRemotingSerializationProvider.Factory);
            configurator.UseSettings(useRemotingSettings.Factory);
            configurator.ConfigureDependencies(
                dependencies =>
            {
                configureDependencies.ConfigAction(dependencies);
            });
        }