Каждая зависимость, которую вы пытаетесь внедрить через @inject, должна быть помечена как @injectable и зарегистрирована через bind. Я действительно не знаю, как работает функция decorate (поэтому я не знаю, можете ли вы использовать ее для пометки функции, а не класса как инъекционной).
Кстати, я думаю, что вы можете добиться того, чего хотите, просто зарегистрировав свою зависимость как значение c dynamici и вернув желаемую функцию, как указано здесь . В вашем случае, что-то вроде этого:
DIContainer.bind(InjectionTypes.UUIDv4).toDynamicValue((context: interfaces.Context) => { return uuid });
В качестве альтернативы, вы можете просто импортировать функцию в своем сервисе без ее внедрения или обернуть функцию в другой сервис, который вы можете пометить как инъекционный (скажем, услуга провайдера uuid).