In my first question
Locate the correct composition root for a .NET library
helped clarifying about Dependency Injection. The exhaustive answer of Steven states (in few words if it possible) that a reusable library is a particular a case and here we can use poor-man-injection
(see the answer for completeness).
Studying the source code of AutoFixture, you can note that the main assembly use DI everywhere without depending on a container; something well explained in Mark Seemann book.
The question is: can someone introduce a pattern (or good practice) to to abstract the composition root without using a container?
Further notes (optional):
Backing to AutoFixture where the composition root occurs in Fixture
type constructors; I think that *Relays
class are used to group instances in a similar manner some DI library has the concept of module.
It's interesting note that there's a type named BehaviourRoot
that sits on the top of the graph (is this the kind of abstraction I'm searching?).
The description of the Composition Root pattern explicitly states that it can be implemented without a DI Container. The pattern is independent of container usage, and can be used with or without a container.
The Composition Root is the entry point of an application. By definition, it has no callers so it makes no sense to abstract it.
To quote the above article:
The Composition Root is an application infrastructure component.
Only applications should have Composition Roots. Libraries and frameworks shouldn't.
(bold my emphasis)
AutoFixture is a library, and thus has no Composition Root. The Fixture
class is Façade, in the spirit of building a DI-friendly library.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With