lightweight ioc container (c++11)