Поиск цели прокси-объекта 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, и вы уже знаете, как получить это оттуда:)