Right now we use DI/IOC and when we need to pass extra parameters to a constructor we use a factory class e.g.
public class EmailSender
{
internal Email
The largest reason I can think of (without just looking at issues with Service Locators in general) is that it is not what I as a user of your class would expect.
Meta discussion:
Some DI frameworks (Guice for example) will build the factory for you.
Some people advocate separating the "newable" from the "injectable".