Use with_metaclass for provider