У меня есть интерфейс IFoo, для которого я хочу предоставить реализацию по умолчанию Foo.
Foo может использоваться как отдельный класс / компонент другими классами, которые реализуют IFoo.
IFoo используется несколькими классами, которые в основном реализуют его, перенаправляя вызовы в Foo, но для некоторых методов они могут предоставлять собственную реализацию.
Foo нужен доступ к (приватным) членам вызывающего класса.
Передача этих членов в качестве аргументов в вызовах методов невозможна, поскольку они не являются (и не должны быть) частью интерфейса IFoo.
Предоставление открытых свойств этим членам только для этой цели нежелательно, поскольку это может сделать интерфейсы вызывающих классов слишком сложными.
Вопрос в том, что является хорошим дизайном для предоставления доступа Foo к этим членам или как это обычно достигается? Есть ли какие-либо известные шаблоны для этого?
РЕДАКТИРОВАТЬ: наследование не вариант, потому что классы, которые реализуют IFoo не могут наследовать от того же класса.