0

Je suit mixin défini:Comment puis-je mélanger des attributs avec Dynamic Proxy défini sur des instances mixin?

public interface IMixin 
{ 
    string SomeProperty { get; set; } 
} 

public class Mixin : IMixin 
{ 
    [SomeAttribute] 
    public string SomeProperty { get; set; } 
} 

Cela s'injecté avec les éléments suivants -call "générateur proxy":

using Castle.DynamicProxy; 

var proxyGenerationOptions = new ProxyGenerationOptions(); 
var mixin = new Mixin(); 
proxyGenerationsOptions.AddMixinInstance(mixin); 
var additionalInterfacesToProxy = new [] 
            { 
            typeof (IMixin) 
            }; 
var proxyGenerator = new ProxyGenerator(); 
var proxy = proxyGenerator.CreateClassProxy(/* base type */, 
              additionalInterfacesToProxy, 
              proxyGenerationOptions, 
              /* interceptor instance */); 

Le problème que je suis face:

var instance = /* proxy instance */; 
var propertyInfo = instance.GetType() 
          .GetProperty(nameof(IMixin.SomeProperty)); 
var attribute = Attribute.GetCustomAttribute(propertyInfo, 
              typeof(SomeAttribute), 
              true); 

attribute est nul.

Comment puis-je mélanger une instance concrète, y compris les attributs définis dans le type (sur properties/class/methods/fields/...)?

+0

Que dit 'instance.GetType(). FullName'? –

+0

@ LasseV.Karlsen 'Castle.Proxies. ** BaseType ** Proxy',' propertyInfo' n'est pas nul, donc le mixin est appliqué en fonction de 'proxyGenerationOptions'. –

+0

Je suppose que vous ne voulez pas l'attribut sur l'interface 'IMixin'? –

Répondre

0

Il y a une solution disponible:

using System.Reflection.Emit; 
using Castle.DynamicProxy; 

var proxyGenerationOptions = new ProxyGenerationsOptions(); 
/* ... */ 
var customAttributeBuilder = new CustomAttributeBuilder(/* ... */); 
proxyGenerationOptions.AdditionalAttributes.Add(customAttributeBuilder); 

Le seul inconvénient: Vous ne pouvez pas définir les attributs des membres du type, juste sur la classe elle-même.