public RuntimeInstance(Assembly functionAppConfigurationAssembly, Action <IServiceCollection, ICommandRegistry> beforeServiceProviderBuild, Action <IServiceProvider, ICommandRegistry> afterServiceProviderBuild) { // Find the configuration implementation and service collection IFunctionAppConfiguration configuration = LocateConfiguration(functionAppConfigurationAssembly); IContainerProvider containerProvider = // ReSharper disable once SuspiciousTypeConversion.Global - externally provided (configuration as IContainerProvider) ?? new DefaultContainerProvider(); ServiceCollection = containerProvider.CreateServiceCollection(); CommandingDependencyResolverAdapter adapter = new CommandingDependencyResolverAdapter( (fromType, toInstance) => ServiceCollection.AddSingleton(fromType, toInstance), (fromType, toType) => ServiceCollection.AddTransient(fromType, toType), (resolveType) => ServiceProvider.GetService(resolveType) ); ICommandRegistry commandRegistry; // ReSharper disable once SuspiciousTypeConversion.Global - externally provided if (configuration is ICommandingConfigurator commandingConfigurator) { commandRegistry = commandingConfigurator.AddCommanding(adapter); } else { CommandingRuntime commandingRuntime = new CommandingRuntime(); commandRegistry = commandingRuntime.AddCommanding(adapter); } // Register internal implementations RegisterInternalImplementations(); // Invoke the builder process FunctionHostBuilder builder = CreateBuilderFromConfiguration(commandRegistry, configuration); Builder = builder; FunctionBuilder functionBuilder = (FunctionBuilder)builder.FunctionBuilder; SetupAuthorization(builder, functionBuilder); RegisterCoreDependencies(builder.FunctionDefinitions); RegisterTimerCommandFactories(builder.FunctionDefinitions); RegisterHttpDependencies(builder.FunctionDefinitions); RegisterCosmosDependencies(builder.FunctionDefinitions); beforeServiceProviderBuild?.Invoke(ServiceCollection, commandRegistry); ServiceProvider = containerProvider.CreateServiceProvider(ServiceCollection); afterServiceProviderBuild?.Invoke(ServiceProvider, commandRegistry); builder.ServiceProviderCreatedAction?.Invoke(ServiceProvider); }
protected AbstractDispatchTestBase(Action <ICommandRegistry, CustomDispatcher> registrations) { var serviceCollection = new ServiceCollection(); var resolver = new CommandingDependencyResolverAdapter( (type, instance) => serviceCollection.AddSingleton(type, instance), (type, impl) => serviceCollection.AddTransient(type, impl), type => ServiceProvider.GetService(type) ); CommandingConfiguration = new CommandingRuntime(); var registry = CommandingConfiguration.AddCommanding(resolver); CommandTracer = new CommandTracer(); serviceCollection.AddSingleton(CommandTracer); CustomDispatcher = new CustomDispatcher(); CustomExecuter = new CustomExecuter(); registrations(registry, CustomDispatcher); ServiceProvider = serviceCollection.BuildServiceProvider(); Dispatcher = ServiceProvider.GetRequiredService <ICommandDispatcher>(); }
public RuntimeInstance(Assembly functionAppConfigurationAssembly, Action <IServiceCollection, ICommandRegistry> beforeServiceProviderBuild, IServiceCollection serviceCollection) { if (serviceCollection == null) { System.Console.WriteLine("No service collection supplied by runtime"); } ServiceCollection = serviceCollection ?? new ServiceCollection(); BuiltServiceProvider = new Lazy <IServiceProvider>(() => ServiceCollection.BuildServiceProvider()); FunctionAppHostBuilder appHostBuilder = null; IFunctionAppConfiguration configuration = null; IFunctionAppHost appHost = ConfigurationLocator.FindFunctionAppHost(functionAppConfigurationAssembly); if (appHost != null) { appHostBuilder = new FunctionAppHostBuilder(); appHost.Build(appHostBuilder); if (appHostBuilder.FunctionAppConfiguration != null) { configuration = (IFunctionAppConfiguration)Activator.CreateInstance(appHostBuilder.FunctionAppConfiguration); } } if (configuration == null) { configuration = ConfigurationLocator.FindConfiguration(functionAppConfigurationAssembly); } CommandingDependencyResolverAdapter adapter = new CommandingDependencyResolverAdapter( (fromType, toInstance) => ServiceCollection.AddSingleton(fromType, toInstance), (fromType, toType) => ServiceCollection.AddTransient(fromType, toType), resolveType => ServiceProvider.GetService(resolveType) ); ICommandRegistry commandRegistry; // ReSharper disable once SuspiciousTypeConversion.Global - externally provided if (configuration != null && configuration is ICommandingConfigurator commandingConfigurator) { commandRegistry = commandingConfigurator.AddCommanding(adapter); } else { CommandingRuntime commandingRuntime = new CommandingRuntime(); commandRegistry = commandingRuntime.AddCommanding(adapter); } // Register internal implementations RegisterInternalImplementations(); FunctionHostBuilder builder = null; IFunctionCompilerMetadata functionCompilerMetadata = null; CompileTargetEnum compileTarget; if (configuration != null) { // Invoke the builder process builder = CreateBuilderFromConfiguration(commandRegistry, configuration); if (appHostBuilder != null) { builder.Options = appHostBuilder.Options; } FunctionBuilder functionBuilder = (FunctionBuilder)builder.FunctionBuilder; FunctionDefinitions = builder.FunctionDefinitions; compileTarget = builder.Options.HttpTarget; SetupAuthorization(builder, functionBuilder); } else { functionCompilerMetadata = LocateFunctionCompilerMetadata(functionAppConfigurationAssembly); FunctionDefinitions = functionCompilerMetadata.FunctionDefinitions; compileTarget = functionCompilerMetadata.CompilerOptions.HttpTarget; } PostBuildPatcher.EnsureFunctionsHaveUniqueNames(FunctionDefinitions); RegisterCoreDependencies(builder?.MediatorType ?? typeof(DefaultMediatorDecorator), FunctionDefinitions, compileTarget); RegisterTimerCommandFactories(FunctionDefinitions); RegisterHttpDependencies(FunctionDefinitions); RegisterCosmosDependencies(FunctionDefinitions); RegisterOutputBindingDependencies(FunctionDefinitions); CreatePluginFunctions(functionCompilerMetadata?.ClaimsMappings, FunctionDefinitions); RegisterLoggerIfRequired(); }
public RuntimeInstance(Assembly functionAppConfigurationAssembly, Action <IServiceCollection, ICommandRegistry> beforeServiceProviderBuild, IServiceCollection serviceCollection) { ServiceCollection = serviceCollection ?? new ServiceCollection(); BuiltServiceProvider = new Lazy <IServiceProvider>(() => ServiceCollection.BuildServiceProvider()); // Find the configuration implementation and service collection IFunctionAppConfiguration configuration = LocateConfiguration(functionAppConfigurationAssembly); CommandingDependencyResolverAdapter adapter = new CommandingDependencyResolverAdapter( (fromType, toInstance) => ServiceCollection.AddSingleton(fromType, toInstance), (fromType, toType) => ServiceCollection.AddTransient(fromType, toType), resolveType => ServiceProvider.GetService(resolveType) ); ICommandRegistry commandRegistry; // ReSharper disable once SuspiciousTypeConversion.Global - externally provided if (configuration != null && configuration is ICommandingConfigurator commandingConfigurator) { commandRegistry = commandingConfigurator.AddCommanding(adapter); } else { CommandingRuntime commandingRuntime = new CommandingRuntime(); commandRegistry = commandingRuntime.AddCommanding(adapter); } // Register internal implementations RegisterInternalImplementations(); FunctionHostBuilder builder = null; IFunctionCompilerMetadata functionCompilerMetadata = null; if (configuration != null) { // Invoke the builder process builder = CreateBuilderFromConfiguration(commandRegistry, configuration); FunctionBuilder functionBuilder = (FunctionBuilder)builder.FunctionBuilder; FunctionDefinitions = builder.FunctionDefinitions; SetupAuthorization(builder, functionBuilder); } else { functionCompilerMetadata = LocateFunctionCompilerMetadata(functionAppConfigurationAssembly); FunctionDefinitions = functionCompilerMetadata.FunctionDefinitions; } RegisterCoreDependencies(FunctionDefinitions); RegisterTimerCommandFactories(FunctionDefinitions); RegisterHttpDependencies(FunctionDefinitions); RegisterCosmosDependencies(FunctionDefinitions); CreatePluginFunctions(functionCompilerMetadata?.ClaimsMappings, FunctionDefinitions); //beforeServiceProviderBuild?.Invoke(ServiceCollection, commandRegistry); //ServiceProvider = containerProvider.CreateServiceProvider(ServiceCollection); //afterServiceProviderBuild?.Invoke(ServiceProvider, commandRegistry); //builder?.ServiceProviderCreatedAction?.Invoke(ServiceProvider); }