Hi Patrick,
Just on the %$ syntax - it's effectively a property resolution operator, and simply means "lookup the object named %${Name} in the injector and bind it in".
If you'd prefer to keep the SplitterWriteDatabase in code, you can do so by manually creating the database object and registering it the injector - you'll need to do this in _config.php to make sure it's available by the time queries start being executed. Something along the lines of
$params = [
'server' => FROM_CONSTANT_IN_SS_ENV
'username' => FROM_CONSTANT_IN_SS_ENV
'password' => FROM_CONSTANT_IN_SS_ENV
];
$writeDb = new MySQLDatabase;
$writeDb->connect($params);
Injector::inst()->registerService($writeDb, 'SplitterWriteDatabase');