Of course, there are legitimate reasons for this sort of dependency injection-style parameterization, but adding support for arbitrary interfaces broadens your "supported configuration surface" so much that usually it doesn't pass the YAGNI test — unless you need it for tests.