multiple providers with functor