feat(#493): Add container lifecycle events #743
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
What does this PR do?
The PR allows to override the
DockerContainer
lifecycle members (StartAsync
,StopAsync
,UnsafeCreateAsync
,UnsafeDeleteAsync
,UnsafeStartAsync
,UnsafeStopAsync
). This allows modules to extend or change the default lifecycle behavior to the module requirements. TheUnsafe*
members areprotected
and not thread-safe. Their public entrypoints are thread-safe though. This is necessary otherwise we end up with nested locks which are bad. The implementation takes care that theUnsafe*
members are called in a thread-safe environment.The PR adds the events
Creating
,Starting
,Stopping
,Created
,Started
,Stopped
to theIContainer
interfaces. Developers can subscribe to those events and get notified soon as the container reached the respected state.Refactors the Guard implementation to support various different use cases. PR makes Guard public.
Why is it important?
To allow developers access to the different resource lifecycles.
Related issues
Breaking Changes
The interface
IWaitUntil.Until(IContainer, ILogger)
has changed toIWaitUntil.UntilAsync(IContainer)
. The logger is now available through the Docker resource instance. Providing backwards compatibility is cumbersome. Adding an interface member requires a change anyway. It is easier to simply change the interface name and remove theILogger
arg.