The Engines behind the Ivy class (SortEngine, SearchEngine, InstallEngine, etc.) are now dependent of the IvySettings. However, they usually only need a small part of it. That makes the use (and the testing) of the engine a little bit more complex because it is not clear which part of the settings will be used.
I think it should be better to reduce the dependency between the Engine and the IvySettings. I see two aproach to do that: 1. For each engines we define one or more interface implemented by the IvySettings, and we use the interface(s) in the engine instead of the IvySettings directly. 2. Instead of injecting the IvySetting in the engine, we inject the 'part' of the settings that is required by the engine (expl: a VersionMatcher, a CircularDependencyStrategy, etc...). This aproach is I think cleaner because it doesn't introduce new artefacts, but it change the life-cycle of the engines that will have to be recreated/updated when the settings is updated. WDYT? -- Gilles SCOKART
