ServiceStack uses a slightly modified version of Funq - which was adopted because of its excellent performance and memory characteristics. ServiceStack's version of Funq has been enhanced with Expression-based Auto-wiring and lifetime Request Scope.
For each of these features, dependencies are resolved for all parameters in the constructor that has the most arguments as well as all public properties.
You can register dependencies so that all the dependencies are automatically auto-wired. Just like the hooks above, once resolved Funq will create a new instance resolving dependencies for the constructor that has the most arguments as well as all public properties.
Funq also supports custom creation of instances. When used no auto-wiring is performed and it's left up to you to explicitly resolve all your dependencies.
Adding a custom ContainerAdapter allows your services to resolve its dependencies from an alternative IOC, in this way they act like a dependency repository where the services are still registered in Funq but all their dependencies are resolved by the ContainerAdapter specified. Dependencies in constructors are resolved by calling IContainerAdapter.Resolve<T>() whilst public property dependencies are resolved with IContainerAdapter.TryResolve<T>(), the idea is you can have missing constructor dependencies throw an exception whilst you can be more lax about property dependencies, where your service can continue to execute without them (should you wish).
Which will first try to call your ContainerAdapter if it implements IRelease otherwise if the service is IDisposable it will just dispose of it itself.
Otherwise you can override default implementation in your AppHost.Release(instance) if you want to do something other than the default implementation.