// ReSharper disable PartialTypeWithSinglePart namespace TeamCity.MSBuild.Logger { using System; using Microsoft.Build.Framework; using EventHandlers; using JetBrains.TeamCity.ServiceMessages.Read; using JetBrains.TeamCity.ServiceMessages.Write; using JetBrains.TeamCity.ServiceMessages.Write.Special; using JetBrains.TeamCity.ServiceMessages.Write.Special.Impl.Updater; using Pure.DI; using static Pure.DI.Lifetime; internal partial class Composition { // ReSharper disable once UnusedMember.Local private static void Setup() => DI.Setup(nameof(Composition)) .DefaultLifetime(Singleton) .Bind().To().Root("Logger") .Bind().To() .Bind().To() .Bind().To() .Bind().Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().To() .Bind().As(Transient).To() .Bind().As(Transient).To() .Bind().Bind().To() // Colors .Bind().To() .Bind(ColorThemeMode.Default).To() .Bind(ColorThemeMode.TeamCity).To() // IStatistics .Bind().To() .Bind(StatisticsMode.Default).To() .Bind(StatisticsMode.TeamCity).To() // ILogWriter .Bind().To() .Bind(ColorMode.Default).To() .Bind().Bind().Tags(ColorMode.TeamCity, TeamCityMode.SupportHierarchy).To() .Bind(ColorMode.NoColor).To() .Bind(ColorMode.AnsiColor).To() // IHierarchicalMessageWriter .Bind().To() .Bind(TeamCityMode.Off).To() // Build event handlers .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() .Bind>().To() // Service messages .Bind().To() .Bind().To() .Bind().To() .Bind().As(Transient).To(_ => DateTime.Now) .Bind(typeof(TimestampUpdater)).To() .Bind(typeof(BuildErrorMessageUpdater)).To() .Bind(typeof(BuildWarningMessageUpdater)).To() .Bind(typeof(BuildMessageMessageUpdater)).To() .Bind().To( ctx => { ctx.Inject(out var teamCityServiceMessages); ctx.Inject(ColorMode.NoColor, out var logWriter); return teamCityServiceMessages.CreateWriter( str => { logWriter.Write(str + "\n"); }); }) .Bind().To(); } }