Using Scala reflection for everything. Finally you can bind functions and inject them by type