Generally speaking, there's nothing inherently wrong with your reasoning. More or less that's how the issue can be solved.
However, your CompositeCreator
isn't actually composite, since it uses precisely one "creation method".
It's difficult to say anything more, because we don't know your project internals, but if it integrates well into your use cases, then it's fine. What I'd try is stay with ICreator<Tin, Tout>
only and make an extension method IEnumerable<Tout> CreateMany(this IEnumerable<Tin> c)
to deal with collections. You can test both easily, independently (fake ICreator
and check whether collection of inputs is processed). This way you get rid of ICreator<IEnumerable, ...>
, which is usually good, because operating on collection as a whole and operating on individual items often don't go well together.