Which is cleaner: a constructor with many parameters or many setters after construction?
Where do you want to validate the parameters?


If the parameters are passed inside the constructor (either as multiple parameters or as a structure), the constructor can check all of them and throw an exception if something is missing/off. That way, the other methods of the class can assume they are valid. 
If the parameters are passed using setters, then every method needs to check if all the required values are present and valid. If the code runs in a multithreaded context, then there's additional protections needed as a value can change unexpectedly inside a method call if a setter is called from a different thread.