Naive

Intended for testing and very simple applications. Real applications should use a DI framework. This implementation assumes that containing classes always have an accessible, zero-arg constructors and will throw a runtime error if asked to provide an object without such a constructor.