2010-08-26 8 views
4

J'utilise Microsoft Unity 2.0 et l'extension d'interception ne fonctionne pas comme prévu.Microsoft Unity: Interception ne fonctionne pas lorsque vous utilisez BuildUp au lieu de Resolve

Considérez ces deux lignes de code:

MyUnityContainer.Configure<Interception>().SetDefaultInterceptorFor<MyType>(new VirtualMethodInterceptor()); 
var someObject = MyUnityContainer.BuildUp<MyType>(anObject); 

Ces deux lignes ne vous obtenez pas le proxy dynamique que vous attendez pour someObject! Comment peut-on faire fonctionner l'interception pour un tel scénario?

+0

Le même problème s'applique à Unity 1.2 – Falcon

Répondre

4

This page explique que vous ne pouvez pas utiliser l'interception virtuelle en utilisant BuildUp car elle ne peut être appliquée lorsque l'objet est créé (depuis une sous-classe de l'objet cible est généré dynamiquement):

interception se produit uniquement sur virtuel méthodes Vous devez configurer l'interception au moment de la création de l'objet et ne pouvez pas intercepter un objet existant . VirtualMethodInterceptor ne fonctionne que sur les nouveaux objets.

+0

Existe-t-il un moyen d'intercepter les adresses existantes sans les rendre clonables? Peut-être un créateur d'objet personnalisé? – Falcon

0

Vous pouvez utiliser les intercepteurs Interface ou TransparentProxy à la place pour intercepter une instance existante (puisque ceux-ci utilisent des objets proxy explicites).

Je pourrais voir l'ajout éventuel d'un VirtualMethodProxyInterceptor, mais je suppose que cela causerait plus de confusion que d'aide.