in src/library/AppContainerConfig.cs [37:236]
static AppContainerConfig()
{
var builder = new ContainerBuilder();
#region SingleInstance
builder.RegisterType<KubeConfigManagementClient>()
.AsSelf()
.As<IKubeConfigManagementClient>()
.SingleInstance();
builder.RegisterType<KubectlImpl>()
.As<IKubectlImpl>()
.SingleInstance();
builder.RegisterType<K8sClientFactory>()
.As<IK8sClientFactory>()
.SingleInstance();
// Port forwarding
builder.RegisterType<KubernetesPortForwardManager>()
.As<IKubernetesPortForwardManager>()
.SingleInstance();
builder.RegisterType<StreamManager>()
.As<IStreamManager>()
.SingleInstance();
builder.RegisterType<EnvironmentVariables>()
.As<IEnvironmentVariables>()
.SingleInstance();
builder.RegisterType<EndpointManagementClient>()
.AsSelf()
.As<IEndpointManagementClient>()
.SingleInstance();
builder.RegisterType<ImageProvider>()
.As<IImageProvider>()
.SingleInstance();
builder.RegisterType<LinuxEndpointManagerLauncher>().AsSelf();
builder.RegisterType<WindowsEndpointManagerLauncher>().AsSelf();
builder.RegisterType<OsxEndpointManagerLauncher>().AsSelf();
builder.Register<IEndpointManagerLauncher>(c =>
{
return c.Resolve<IPlatform>() switch
{
var v when v.IsWindows => c.Resolve<WindowsEndpointManagerLauncher>(),
var v when v.IsLinux => c.Resolve<LinuxEndpointManagerLauncher>(),
var v when v.IsOSX => c.Resolve<OsxEndpointManagerLauncher>(),
_ => throw new InvalidOperationException($"Unsupported operating system: {c.Resolve<IPlatform>()}"),
};
}).As<IEndpointManagerLauncher>().SingleInstance();
// Versioning
builder.RegisterType<AssemblyMetadataProvider>()
.As<IAssemblyMetadataProvider>()
.SingleInstance();
#endregion SingleInstance
#region InstancePerLifetimeScope
builder.RegisterType<WorkloadInformationProvider>()
.As<IWorkloadInformationProvider>()
.InstancePerLifetimeScope();
builder.RegisterType<KubernetesRemoteEnvironmentManager>()
.As<IRemoteEnvironmentManager>()
.InstancePerLifetimeScope();
builder.RegisterType<LocalEnvironmentManager>()
.As<ILocalEnvironmentManager>()
.InstancePerLifetimeScope();
builder.RegisterType<LocalAgentManager>()
.As<ILocalAgentManager>()
.InstancePerLifetimeScope();
builder.RegisterType<PortMappingManager>()
.As<IPortMappingManager>()
.InstancePerLifetimeScope();
#endregion InstancePerLifetimeScope
#region InstancePerDependency
// Service clients
// Service client exception strategies
builder.RegisterType<KubernetesRestClientExceptionStrategy>()
.AsSelf()
.InstancePerDependency();
// Management Clients
builder.RegisterType<ConnectManagementClient>()
.AsSelf()
.As<IConnectManagementClient>()
.InstancePerDependency();
builder.RegisterType<KubernetesManagementClient>()
.AsSelf()
.As<IKubernetesManagementClient>()
.InstancePerDependency();
builder.RegisterType<RoutingManagementClient>()
.AsSelf()
.As<IRoutingManagementClient>()
.InstancePerDependency();
// Management client exception strategies
builder.RegisterType<ManagementClientExceptionStrategy>()
.AsSelf()
.InstancePerDependency();
builder.RegisterType<DevHostAgentExecutorClient>()
.As<IDevHostAgentExecutorClient>()
.InstancePerDependency();
builder.RegisterType<KubernetesClient>()
.As<IKubernetesClient>()
.InstancePerDependency();
builder.RegisterType<ReversePortForwardManager>()
.As<IReversePortForwardManager>()
.InstancePerDependency();
builder.RegisterType<ServicePortForwardManager>()
.As<IServicePortForwardManager>()
.InstancePerDependency();
builder.RegisterType<Socket>()
.As<ISocket>()
.InstancePerDependency();
builder.RegisterType<PortListener>()
.As<IPortListener>()
.InstancePerDependency();
#endregion InstancePerDependency
#region Connect
builder.RegisterType<ResourceNamingService>()
.As<IResourceNamingService>()
.InstancePerDependency();
builder.RegisterType<HttpClient>()
.AsSelf()
.ExternallyOwned()
.InstancePerDependency();
builder.RegisterType<WorkloadRestorationService>()
.As<IWorkloadRestorationService>()
.InstancePerDependency();
builder.RegisterType<RemoteRestoreJobDeployer>()
.As<IRemoteRestoreJobDeployer>()
.InstancePerDependency();
builder.RegisterType<LocalProcessConfig>()
.As<ILocalProcessConfig>()
.InstancePerDependency();
builder.RegisterType<RemoteContainerConnectionDetailsResolver>()
.AsSelf()
.InstancePerDependency();
builder.RegisterGeneric(typeof(OwnedLazyWithContext<>))
.As(typeof(IOwnedLazyWithContext<>))
.InstancePerDependency();
builder.RegisterGeneric(typeof(OwnedLazyWithContext<,>))
.As(typeof(IOwnedLazyWithContext<,>))
.InstancePerDependency();
builder.RegisterGeneric(typeof(OwnedLazyWithContext<,,>))
.As(typeof(IOwnedLazyWithContext<,,>))
.InstancePerDependency();
#endregion Connect
#region Modules/build callbacks
// MacAddressHash
builder.RegisterModule(new MacAddressHashModule());
// Logging Module
builder.RegisterModule(new LoggingModule(ClientNames.Library)
{
EnableDefaultLogFile = true,
ApplicationInsightsInstrumentationKey = (c) => Common.Constants.ApplicationInsights.InstrumentationKey,
MacAddressHash = (c) => c.Resolve<MacInformationProvider>().MacAddressHash
});
// Common Module
builder.RegisterModule<CommonModule>();
// Progress Module
builder.RegisterModule<ProgressModule>();
#endregion Modules/build callbacks
RootScope = builder.Build();
}