Я ищу набор объектов, предположим, что на данный момент есть 3 объекта, которые реализуют общий интерфейс, а затем обертывают эти объекты внутри четвертого объект, также реализующий один и тот же интерфейс.Создание класса для интерфейса во время выполнения, на C#
Реализация четвертого объекта методов и свойств просто вызовет соответствующие биты этих трех базовых объектов. Я знаю, что здесь будут случаи, когда это не имеет смысла делать это, но это для архитектуры многоадресной услуги, так что уже существует хороший набор ограничений.
Мой вопрос - с чего начать. Генерация этого четвертого объекта должна выполняться в памяти во время выполнения, поэтому я думаю, Reflection.Emit
, к сожалению, у меня недостаточно опыта, чтобы даже знать, с чего начать.
Должен ли я построить сборку в памяти? Конечно, это выглядит так, но мне просто хотелось бы быстро указать, где я должен начинать.
В основном я ищу интерфейс и список экземпляров объектов, реализующих этот интерфейс, и создание нового объекта, а также реализацию этого интерфейса, который должен «многоадресный» вызов всех методов и доступ к свойствам для всех лежащих в основе объектов, по крайней мере, насколько это возможно. Будут куча проблем с исключениями и т. Д., Но я займусь этими битами, когда доберусь до них.
Это для сервис-ориентированной архитектуры, где я хотел бы иметь существующий код, который, например, использует службу регистрации, чтобы теперь обращаться к нескольким службам регистрации, не изменяя код, который использует службы , Вместо этого я бы хотел запустить среду выполнения - создать обертку для журнала, которая внутренне просто вызывает соответствующие методы для нескольких базовых объектов.
Это для .NET 3.5 и C#.
Я на самом деле написал пример, который это сделал (здесь на SO) несколько месяцев назад ... Я посмотрю, смогу ли я найти его ... –
как так? http://stackoverflow.com/questions/847809/how-can-i-write-a-generic-container-class-that-implements-a-given-interface-in-c/847975#847975 –
Марк, выберите способ решить это, либо пометить вопрос как дубликат, либо опубликовать реальный ответ, который я могу принять. –