> I don't see why it's required. Even on the resolvers side both arguments are optional. It should be valid to call remove with multiple filters/path on the resolver directly.

That's not that easy, First if filters is optional we would have to inject `FilterConfiguration` to all resolves, It is needed to get configred filters. I moved some logic to the manager to keep resolver interface simple. For example if we allow to pass array of filters\pathes each resolver would have to support it (I dont see much optimization if we do so).

> The CacheManager::remove should not iterate on the given filters itself

It already does batch operation where it is possible. I dont think it could be optimized more.