TeamCity.CSharpInteractive/HostService.cs (52 lines of code) (raw):

// ReSharper disable UnusedMember.Global // ReSharper disable ClassNeverInstantiated.Global namespace TeamCity.CSharpInteractive; using HostApi; internal class HostService : IHost { private readonly ILog<HostService> _log; private readonly ISettings _settings; private readonly IStdOut _stdOut; public HostService( ILog<HostService> log, ISettings settings, IStdOut stdOut, IProperties properties) { _log = log; _settings = settings; _stdOut = stdOut; Props = properties; } public IReadOnlyList<string> Args => _settings.ScriptArguments; public IProperties Props { get; } public void WriteLine() => _stdOut.WriteLine(); public void WriteLine<T>(T line, Color color = Color.Default) => _stdOut.WriteLine(new Text(line?.ToString() ?? string.Empty, color)); public void Error(string? error, string? errorId = default) { if (error != default) { _log.Error(new ErrorId(errorId ?? "Unknown"), error); } } public void Warning(string? warning) { if (warning != default) { _log.Warning(warning); } } public void Info(string? text) { if (text != default) { _log.Info(text); } } public void Trace(string? trace, string? origin = default) { if (trace != default) { _log.Trace(() => new[] {new Text(trace)}, origin ?? string.Empty); } } public T GetService<T>() => Composer.Resolve<T>(); }