Just found a solution after having an exact same issue. The trick is to override cache dependency in VirtualFile. In VirtualPathProvider override method GetCacheDependency like so:
public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
return IsPathVirtual(virtualPath) ? null : base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
The IsPathVirtual checks if the path is one of the embedded resources. It's where you would check if virtual path points to "/Services" This way any other (physical) files are cached and directory monitored for changes.
PS: I Only found this by looking at exception stack trace and seeing it was getting a cache dependency.
Hope this helps.
Think about the box