-
Notifications
You must be signed in to change notification settings - Fork 83
Validation
It can be convenient to test your app container consistency in a unit test. This practice makes sure you did not forget to register a bunch of components as you were implementing a new feature.
Let's again register the types defined in the getting started section:
Hypodermic::ContainerBuilder builder;
builder.registerType< LengthPrefixedMessageSerializer >().as< IMessageSerializer >();
builder.registerType< ConsoleMessageWriter >().as< IMessageWriter >();
and validate the ContainerBuilder
:
builder.validate();
What happens here? Hypodermic will try to resolve every single registration by applying their rules:
- Validating
IMessageSerializer
- Build a
Container
- Resolve
IMessageSerializer
- Build a
- Validating
IMessageWriter
- Build a
Container
- Resolve
IMessageWriter
- Build a
If no exceptions were thrown, the container is correctly configured.
Let's try again, but this time we won't register IMessageSerializer
:
Hypodermic::ContainerBuilder builder;
builder.registerType< LengthPrefixedMessageSerializer >();
builder.registerType< ConsoleMessageWriter >().as< IMessageWriter >();
builder.validate();
Have a look at the validation:
- Validating
LengthPrefixedMessageSerializer
- Build a
Container
- Resolve
LengthPrefixedMessageSerializer
- Build a
- Validating
IMessageWriter
- Build a
Container
- Resolve
IMessageWriter
-> exception
- Build a
Since ConsoleMessageWriter
needs to be injected with an IMessageSerializer
, the validation of the container throws an exception because it does not know how to instantiate this component. The container is aware of the concrete type LengthPrefixedMessageSerializer
, but was not told that it implements IMessageSerializer
.