/// <summary> /// Construct a <see cref="RepositoryManager"/> /// </summary> /// <param name="repositoryFactory">The value of <see cref="repositoryFactory"/>.</param> /// <param name="commands">The value of <see cref="commands"/>.</param> /// <param name="ioManager">The value of <see cref="ioManager"/></param> /// <param name="eventConsumer">The value of <see cref="eventConsumer"/></param> /// <param name="gitRemoteFeaturesFactory">The value of <see cref="gitRemoteFeaturesFactory"/>.</param> /// <param name="repositoryLogger">The value of <see cref="repositoryLogger"/></param> /// <param name="logger">The value of <see cref="logger"/></param> public RepositoryManager( ILibGit2RepositoryFactory repositoryFactory, ILibGit2Commands commands, IIOManager ioManager, IEventConsumer eventConsumer, IGitRemoteFeaturesFactory gitRemoteFeaturesFactory, ILogger <Repository> repositoryLogger, ILogger <RepositoryManager> logger) { this.repositoryFactory = repositoryFactory ?? throw new ArgumentNullException(nameof(repositoryFactory)); this.commands = commands ?? throw new ArgumentNullException(nameof(commands)); this.ioManager = ioManager ?? throw new ArgumentNullException(nameof(ioManager)); this.eventConsumer = eventConsumer ?? throw new ArgumentNullException(nameof(eventConsumer)); this.gitRemoteFeaturesFactory = gitRemoteFeaturesFactory ?? throw new ArgumentNullException(nameof(gitRemoteFeaturesFactory)); this.repositoryLogger = repositoryLogger ?? throw new ArgumentNullException(nameof(repositoryLogger)); this.logger = logger ?? throw new ArgumentNullException(nameof(logger)); semaphore = new SemaphoreSlim(1); }