Использование Castle DP (очевидно)
Что ж, вам придется создать новый объект для возврата, так как вы не можете иметь существующий тип, получить новый интерфейс во время выполнения вашей программы.
Для этого вам нужно создать прокси, а затем скопировать состояние вашего ранее существующего объекта на прокси. DP не делает этого OOTB. В версии 2.5 вы могли использовать прокси нового класса с target, но это работало бы, только если все свойства этого типа были виртуальными.
Так или иначе. Вы можете заставить новый тип получить интерфейс IWithId
, либо смешивая в прокси с существующим объектом, который реализует свойство. Затем вызовы членов интерфейса будут перенаправлены на объект.
В качестве альтернативы вы можете предоставить его в качестве дополнительного интерфейса для реализации и иметь роль перехватчика в роли разработчика.