Use interfaces to easy DI and Unit testing

Related to #47