factory refactor.
- Allow developers to resolve controller instances how they want by adding a resolver to the container.
- Factory should not be concerned on how to dispatch a controller so added a callable ControllerDispatcher.
- Change tests