I would never bleed a transaction across service boundaries, refactor it to create a new Service that does the composite behavior you need then push any shared logic that different services share in a reusable dependency (or Extension method if the logic doesn’t need additional deps).
Ultimately the Service Gateway is the recommended way to call Services, an alternative approach is to use ResolveService where since you retrieve an instance of your Service class you can populate deps directly, e.g. if you add a UseDb property to your Services:
public IDbConnection UseDb { set => db = value; }
You can populate it with:
using (var myService = base.ResolveService<MyService>())
{
myService.UseDb = Db;
var response = myService.Any(new MyRequest());
}
Otherwise the recommended way to pass anything between filters/services/etc is to use IRequest.Items which effectively everything has access to:
Request.Items["UseDb"] = Db;
...
var db = Request.Items["UseDb"] as IDbConnection;