2010-02-20 13 views
1

Ceci est à peu près une double question, mais au lieu d'utiliser Castle Dynamic Proxy J'utilise Linfu Getting underlying type of a proxy objectcible de l'objet proxy Linfu

J'utilise automapper pour créer des interfaces proxy que j'envoie à mon viewmodel dans Asp.net MVC. Mon problème vient de ce que je peux dire que MetadataProvider par défaut de MVC trouve les propriétés et les métadonnées en appelant .GetType() sur le modèle.

Alors, que se passe-t-il, les modèles EditorFor() et DisplayFor() ne génèrent aucun champ. Ce que je dois faire est de trouver le type de cible proxy, puis générer mes modèles. Je sais que je peux juste analyser le nom et utiliser GetType ("thename") mais je me demandais s'il y avait un moyen facile.

Répondre

1

LinFu.DynamicProxy ne pas exposer directement l'objet sous-jacent d'une procuration. Il redirige simplement chaque appel de méthode à une instance d'implémentation IInterceptor. Pour accéder à l'objet sous-jacent, vous devez déterminer si l'instance d'intercepteur actuelle possède ou non une instance de classe cible. Si vous travaillez avec AutoMapper, AFAIK, ils utilisent LinFu.DynamicObject pour effectuer une grande partie de l'enregistrement du canard, et l'appel de GetType() sur un type dynamique généré par LinFu.DynamicObject ne vous donnera même pas le réel tapez dans votre modèle de domaine - il va juste vous obtenir un objet qui a été littéralement canardé ensemble par LinFu lui-même.

+0

La meilleure méthode que j'ai trouvée pour extraire des données d'un proxy consiste à implémenter une interface privée connue, puis intercepter l'accès à cette interface et retourner les valeurs dont vous avez besoin. – wasabi

-2

obtenir les dernières AutoMapper - il utilise Castle Dynamic Proxy, et vous savez déjà comment obtenir ce à partir de là :)

+0

Euh, non: http://code.google.com/p/automapperhome/source/browse/#svn/trunk/lib/LinFu.DynamicProxy – jfar

+0

Vous avez raison - apparemment seulement dans Silverlight ils utilisent Castle: http : //www.lostechies.com/blogs/jimmy_bogard/archive/2010/02/18/automapper-for-silverlight-3-0-alpha.aspx qui est étrange –

+0

ok, eh bien - en fait, j'ai raison - ils * * do ** utiliser Castle dans le coffre: http://github.com/jbogard/AutoMapper/tree/master/lib/ –