This will make the container create first C2 through the get call then it will be able to finish on creating C1.

Example for #4:

Here you have a class C2 that is scoped to the session which depends on C1 that itslef scoped to the request, we use a provider to allow us to get the instance of C1 corresponding to the current request as it will change from one request to another.