Метод bind как раз и регистрирует "фабрику". Т.е. при каждом резолве (получения) сервиса из контейнера - он будет создаваться по определяемой схеме.
$container->call(function(CampaignService $c): void {
echo \spl_object_id($c); // 1
});
$container->call(function(CampaignService $c): void {
echo \spl_object_id($c); // 2
});
Если сервис должен быть константным, то имеет смысл
bind заменить на
singleton$container->call(function(CampaignService $c): void {
echo \spl_object_id($c); // 1
});
$container->call(function(CampaignService $c): void {
echo \spl_object_id($c); // 1
});