public IArchivist CreateArchivistChain(DocumentProcessingAction[] actionsToPerform) { var archivistTypes = GetArchivistTypesByActions(actionsToPerform?.Select(it => it.ActionName).ToArray()); var archivistObjectTypes = archivistTypes .Select(archivistType => (ArchivistType: _archivistLinker.GetArchivistType(archivistType.ActionType), ActionName: archivistType.ActionName)) .ToArray(); IArchivist previous = null; IArchivist root = null; foreach (var archivistObjectType in archivistObjectTypes) { var current = _achivistProvider.Resolve(archivistObjectType.ArchivistType); if (current is IConfigurableArchivist) { ((IConfigurableArchivist)current).Configure(actionsToPerform.Single(it => it.ActionName == archivistObjectType.ActionName).RequiredData); } if (root == null) { root = current; } if (previous != null) { ((Archivist)previous).Successor = current; } previous = current; } return(root); }
public Repository(ICharacterFactory factory, IArchivist archivist, ILogMachine logMachine) { _factory = factory; _archivist = archivist; _logger = logMachine; }