/// <inheritdoc/> public void Perform(NoSettings settings, IBootStageBuilder builder) { var typeFinder = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder; var logger = builder.GetAssociation(WellKnownAssociations.Logger) as ILogger; var configurationObjectProviders = new ConfigurationObjectProviders(typeFinder, builder.Container, logger); builder.Bindings.Bind<IConfigurationObjectProviders>().To(configurationObjectProviders); var configurationObjectTypes = typeFinder.FindMultiple<IConfigurationObject>(); configurationObjectTypes.ForEach((System.Action<System.Type>)(_ => { logger.Trace((string)$"Bind configuration object '{_.GetFriendlyConfigurationName()} - {_.AssemblyQualifiedName}'"); _.ShouldBeImmutable(); builder.Bindings.Bind(_).To((System.Func<object>)(() => { var instance = configurationObjectProviders.Provide(_); logger.Trace((string)$"Providing configuration object '{_.GetFriendlyConfigurationName()} - {_.AssemblyQualifiedName}' - {instance.GetHashCode()}"); return instance; })); })); }
/// <inheritdoc/> public void Perform(NoSettings settings, IBootStageBuilder builder) { var typeFinder = builder.GetAssociation(WellKnownAssociations.TypeFinder) as ITypeFinder; var loggerManager = builder.GetAssociation(WellKnownAssociations.LoggerManager) as ILoggerManager; var logger = loggerManager.CreateLogger <Configuration>(); var configurationObjectProviders = new ConfigurationObjectProviders(typeFinder, builder.Container, logger); builder.Bindings.Bind <IConfigurationObjectProviders>().To(configurationObjectProviders); var configurationObjectTypes = typeFinder.FindMultiple <IConfigurationObject>(); configurationObjectTypes.ForEach(_ => { logger.Trace("Bind configuration object '{configurationObjectName} - {configurationObjectType}'", _.GetFriendlyConfigurationName(), _.AssemblyQualifiedName); _.ShouldBeImmutable(); builder.Bindings.Bind(_).To(() => { var instance = configurationObjectProviders.Provide(_); logger.Trace("Providing configuration object '{configurationObjectName} - {configurationTypeName}' - {configurationObjectHash}", _.GetFriendlyConfigurationName(), _.AssemblyQualifiedName, instance.GetHashCode()); return(instance); }); }); }