Поиск цели прокси-объекта LinFu

Это в значительной степени дублирующий вопрос, но вместо использования Castle Dynamic Proxy я использую LinFu. Получение базового типа прокси-объекта.

Я использую Autopper для создания прокси интерфейсов, которые я посылаю своей модели представления в Asp.net MVC. Моя проблема в том, что я могу сказать, что MetadataProvider по умолчанию MVC находит свойства и метаданные, вызывая.GetType() в модели.

Таким образом, происходит то, что шаблоны EditorFor() и DisplayFor() не генерируют никаких полей. Что мне нужно сделать, это найти тип цели прокси и затем сгенерировать мои шаблоны. Я знаю, что могу просто разобрать имя и использовать GetType( "thename"), но мне было интересно, есть ли простой способ.

2 ответа

Решение

LinFu.DynamicProxy не предоставляет прямого доступа к объекту прокси. Он просто перенаправляет каждый вызов метода в экземпляр реализации IInterceptor. Чтобы получить доступ к базовому объекту, вам нужно выяснить, действительно ли текущий экземпляр-перехватчик имеет экземпляр целевого класса или нет.

Если вы работаете с AutoMapper, AFAIK, они используют LinFu.DynamicObject, чтобы выполнять большую часть записи, и вызов GetType() для динамического типа, сгенерированного LinFu.DynamicObject, даже не даст вам фактический тип в вашем домене. модель - она ​​просто достанет вам объект, который был буквально приклеен самому Линфу.

Получите последнюю версию AutoMapper - она ​​использует Castle Dynamic Proxy, и вы уже знаете, как получить это оттуда:)

Другие вопросы по тегам