add constructors for DI
add an activator that caches the created instances