C #: есть ли общий способ переадресации вызова метода к другому объекту (с тем же интерфейсом)? - PullRequest
7 голосов
/ 27 октября 2010

Есть ли способ реализовать этот шаблон универсальным способом?

Все объекты диспетчера и группа рабочих объектов происходят из одного интерфейса.

Любой вызов метода в диспетчереобъект должен быть отправлен (переадресован) одному из рабочих объектов (со всеми аргументами).

Каждый метод должен найти свое собственное имя, найти соответствующий метод в рабочих объектах, обнаружить аргументыа затем сделать звонок.Если возможно, не используйте механизм аргументов переменных.

Есть ли способ сделать это?Отражение?Генерация кода?

Ответы [ 3 ]

5 голосов
/ 27 октября 2010

Это может быть не очень просто, но очень солидно - взгляните на Castle.DynamicProxy: http://kozmic.pl/dynamic-proxy-tutorial/

1 голос
/ 27 октября 2010

Один из возможных подходов состоит в том, чтобы каждый метод в объекте диспетчера вызывал событие, и чтобы все рабочие объекты подписывались на это событие.(Думаю, это называется шаблоном «многоадресного делегата»).

Полагаю, это может быть не так «универсально», как вам нужно, но может быть более простым способом достижения в основном тех же целей.

0 голосов
/ 27 октября 2010

Если вы хотите выбрать маршрут Code-Gen, этот файл t4 выполняет нечто подобное: http://gist.github.com/647885

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...