Exporting
public class Module : IImportsAssembly<Module>
{
/// <summary>Singleton</summary>
public static Module Instance { get; } = new();
/// <summary>Export pre-build action</summary>
public Action<IHostBuilder> HostBuilderAction = (IHostBuilder cb) => WriteLine("Host builder action");
/// <summary>Export pre-build action</summary>
public Action<HostBuilderContext, object> ContainerAction = (HostBuilderContext ctx, object container) => WriteLine("Configuring container");
/// <summary>Export post-build action</summary>
public Action<IHost, object> PostBuildAction = (IHost host, object container) => WriteLine("Post-build action");
}
Importing to IHostBuilder
HostingContainer.ModuleImportCached[Module.Instance].ConfigureHostBuilder(hostBuilder, installDependencies) installs module on IHostBuilder.
// Initialize host builder
IHostBuilder hostBuilder = new HostBuilder();
hostBuilder.UseServiceProviderFactory(HostServiceProviderFactory.Instance);
HostingContainer.ModuleImportCached[Module.Instance].ConfigureHostBuilder(hostBuilder, installDependencies: true);
// Capture container
object[] containers = new object[1];
hostBuilder.ConfigureContainer<object>((HostBuilderContext ctx, object container) => containers[0] = container);
// Build host
IHost host = hostBuilder.Build();
// Post-build actions must be invoked manually
if (containers[0] is IHostBuildActions hostBuildActions) foreach (var action in hostBuildActions.PostBuildActions) action(host, hostBuildActions);
// Invoke post build actions
IServiceProvider services = host.Services;
Full Example
Full example
using Avalanche.Hosting;
using Avalanche.Module;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using static System.Console;
public class hostbuilder
{
public static void Run()
{
{
// <01>
// Initialize host builder
IHostBuilder hostBuilder = new HostBuilder();
hostBuilder.UseServiceProviderFactory(HostServiceProviderFactory.Instance);
HostingContainer.ModuleImportCached[Module.Instance].ConfigureHostBuilder(hostBuilder, installDependencies: true);
// Capture container
object[] containers = new object[1];
hostBuilder.ConfigureContainer<object>((HostBuilderContext ctx, object container) => containers[0] = container);
// Build host
IHost host = hostBuilder.Build();
// Post-build actions must be invoked manually
if (containers[0] is IHostBuildActions hostBuildActions) foreach (var action in hostBuildActions.PostBuildActions) action(host, hostBuildActions);
// Invoke post build actions
IServiceProvider services = host.Services;
// </01>
}
}
// <99>
public class Module : IImportsAssembly<Module>
{
/// <summary>Singleton</summary>
public static Module Instance { get; } = new();
/// <summary>Export pre-build action</summary>
public Action<IHostBuilder> HostBuilderAction = (IHostBuilder cb) => WriteLine("Host builder action");
/// <summary>Export pre-build action</summary>
public Action<HostBuilderContext, object> ContainerAction = (HostBuilderContext ctx, object container) => WriteLine("Configuring container");
/// <summary>Export post-build action</summary>
public Action<IHost, object> PostBuildAction = (IHost host, object container) => WriteLine("Post-build action");
}
// </99>
}