public static ITestHost CreateJobHost(
            IOptions <DurableTaskOptions> options,
            string storageProvider,
            Type durabilityProviderFactoryType,
            ILoggerProvider loggerProvider,
            INameResolver nameResolver,
            IDurableHttpMessageHandlerFactory durableHttpMessageHandler,
            ILifeCycleNotificationHelper lifeCycleNotificationHelper,
            IMessageSerializerSettingsFactory serializerSettingsFactory,
            Action <ITelemetry> onSend)
        {
            IHost host = new HostBuilder()
                         .ConfigureLogging(
                loggingBuilder =>
            {
                loggingBuilder.AddProvider(loggerProvider);
            })
                         .ConfigureWebJobs(
                webJobsBuilder =>
            {
                webJobsBuilder.AddDurableTask(options, storageProvider, durabilityProviderFactoryType);
                webJobsBuilder.AddAzureStorage();
            })
                         .ConfigureServices(
                serviceCollection =>
            {
                ITypeLocator typeLocator = TestHelpers.GetTypeLocator();
                serviceCollection.AddSingleton(typeLocator);
                serviceCollection.AddSingleton(nameResolver);
                serviceCollection.AddSingleton(durableHttpMessageHandler);

                if (lifeCycleNotificationHelper != null)
                {
                    serviceCollection.AddSingleton(lifeCycleNotificationHelper);
                }

                if (serializerSettingsFactory != null)
                {
                    serviceCollection.AddSingleton(serializerSettingsFactory);
                }

                if (onSend != null)
                {
                    serviceCollection.AddSingleton <ITelemetryActivator>(serviceProvider =>
                    {
                        var durableTaskOptions = serviceProvider.GetService <IOptions <DurableTaskOptions> >();
                        var telemetryActivator = new TelemetryActivator(durableTaskOptions)
                        {
                            OnSend = onSend,
                        };
                        return(telemetryActivator);
                    });
                }
            })
                         .Build();

            return(new FunctionsV2HostWrapper(host, options, nameResolver));
        }
        public static ITestHost CreateJobHost(
            IOptions <DurableTaskOptions> options,
            string storageProvider,
            Type durabilityProviderFactoryType,
            ILoggerProvider loggerProvider,
            INameResolver nameResolver,
            IDurableHttpMessageHandlerFactory durableHttpMessageHandler,
            ILifeCycleNotificationHelper lifeCycleNotificationHelper,
            IMessageSerializerSettingsFactory serializerSettingsFactory,
            Action <ITelemetry> onSend,
            bool addDurableClientFactory)
        {
            // Unless otherwise specified, use legacy partition management for tests as it makes the task hubs start up faster.
            // These tests run on a single task hub workers, so they don't test partition management anyways, and that is tested
            // in the DTFx repo.
            if (!options.Value.StorageProvider.ContainsKey(nameof(AzureStorageOptions.UseLegacyPartitionManagement)))
            {
                options.Value.StorageProvider.Add(nameof(AzureStorageOptions.UseLegacyPartitionManagement), true);
            }

            IHost host = new HostBuilder()
                         .ConfigureLogging(
                loggingBuilder =>
            {
                loggingBuilder.AddProvider(loggerProvider);
            })
                         .ConfigureWebJobs(
                webJobsBuilder =>
            {
                if (addDurableClientFactory)
                {
                    webJobsBuilder.AddDurableClientFactoryDurableTask(options);
                }
                else
                {
                    webJobsBuilder.AddDurableTask(options, storageProvider, durabilityProviderFactoryType);
                }

                webJobsBuilder.AddAzureStorage();
            })
                         .ConfigureServices(
                serviceCollection =>
            {
                ITypeLocator typeLocator = TestHelpers.GetTypeLocator();
                serviceCollection.AddSingleton(typeLocator);
                serviceCollection.AddSingleton(nameResolver);
                serviceCollection.AddSingleton(durableHttpMessageHandler);

                if (lifeCycleNotificationHelper != null)
                {
                    serviceCollection.AddSingleton(lifeCycleNotificationHelper);
                }

                if (serializerSettingsFactory != null)
                {
                    serviceCollection.AddSingleton(serializerSettingsFactory);
                }

                if (onSend != null)
                {
                    serviceCollection.AddSingleton <ITelemetryActivator>(serviceProvider =>
                    {
                        var durableTaskOptions = serviceProvider.GetService <IOptions <DurableTaskOptions> >();
                        var telemetryActivator = new TelemetryActivator(durableTaskOptions)
                        {
                            OnSend = onSend,
                        };
                        return(telemetryActivator);
                    });
                }
            })
                         .Build();

            return(new FunctionsV2HostWrapper(host, options, nameResolver));
        }