2010-05-07 10 views
1

J'essaye d'obtenir StructureMap pour mettre un Castle.DynamicProxy autour de certains des objets qu'il crée. J'ai utilisé la fonctionnalité EnrichWith plus tôt, mais je pense que RegisterInterception me conviendrait mieux dans ce cas, puisque j'utilise l'analyse. Le problème est que dans la méthode "Processus (cible d'objet, contexte IContext)", je ne peux pas trouver quelle interface SM essaie d'obtenir, seulement la classe concrète. J'ai pu trouver toutes les interfaces implémentées par cette classe, mais au cas où il implémenterait plus d'une interface, je n'ai aucune idée de la façon de trouver quelle Interface a été réellement demandée. Est-ce qu'il y a un moyen de faire ça?StructureMap avec interception et Castle.DynamicProxy

Voici quelques code:

public class SMInterceptor : TypeInterceptor 
    { 
     private readonly IInterceptor _interceptor; 
     private readonly ProxyGenerator _proxyGenerator; 


     public SMInterceptor(IInterceptor interceptor, ProxyGenerator proxyGenerator) 
     { 
      _interceptor = interceptor; 
      _proxyGenerator = proxyGenerator; 
     } 

     public static List<Type> TypesToIntercept = new List<Type>(); 

     public object Process(object target, IContext context) 
     { 
      var interfaceToTarget = // This is where I want the target interface! 
      var decorator = _proxyGenerator.CreateInterfaceProxyWithTarget(interfaceToTarget, target, _interceptor); 
      return decorator; 
     } 

     public bool MatchesType(Type type) 
     { 
      return true; 
     } 
    } 

Répondre

0

Un peu en retard, mais le code ci-dessous devrait fonctionner (étant donné que le type est une instance)

var interfaceToTarget = context.BuildStack.Current.RequestedType; 
+0

Cela ne fonctionne pas tout à fait raison. J'ai fait un exemple simple d'application de la console ici: http://pastie.org/1088333 Ce retour: Interface: ConsoleApplication1.IOne cible: ConsoleApplication1.Two Et ce que je voulais vraiment était Cela ne fonctionne pas tout à fait raison. J'ai fait un simple exemple d'application de console ici: http://pastie.org/1088333 Cela renvoie: interface: ConsoleApplication1.ITwo – gautema