Если передаваемая вещь не может быть определена в момент создания, вам нужна какая-то форма Abstract Factory , хотя обычно полезно провести грань между типами служб и значений, которые не должныесть обратные ссылки на Сервисы.
Почему я отвечаю в общих чертах?Поскольку вы спрашиваете в общих чертах - приведите пример чего-то более конкретного и контекстуального, к которому вы ищете хороший подход, если вы действительно хотите получить ответ, который будет полезен.
Вы не указалисмотрите ли вы на Принцип инверсии зависимостей или DI Frameworks или Управление зависимостями в библиотеках , которые имеют столько общего и много чего можно выделить.
Я подозреваю,(даже если вы, кажется, не трогаете теги .NET), как рекомендует @TrueWill, превосходная книга Inpendency Injection в .NET поможет вам понять все тонкости (независимо от языка или платформывы используете - передняя часть книги - это просто довольно независимые от технологии шаблоны - до такой степени, что это возможно, учитывая, что превосходные примеры имеют реалистичные уровни сложности).