A code like the following looks as a “code smell” definitely:
public ProductProvider(
IProductDataProvider dataProvider = null,
IProductDecorator decorator = null,
IProductSearchCriteriaParser parser = null,
IProductInventoryDataProvider inventoryProvider = null,
IProductSessionDataProvider sessionProvider = null,
IContentProvider contentProvider = null,
IProductQueueProvider queueProvider = null)
{
}
But unfortunately nothing I can do. What can I say? Alas!

Actually, it’s more ok rather than a code smell. From what I know 2 years later, parameters shouldn’t be optional because iirc it was done only to simplify unit testing. That’s it, everything else looks like a proper dependency injection via constructor.