0

我有以下混入定义:如何将mixin属性与在mixin实例上定义的动态代理混合?

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

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

这获取与下面的 “代理生成” -call注入:

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 */); 

我现在面临的问题:

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

attribute是空值。

如何混入一个具体实例,包括类型中定义的属性(on properties/class/methods/fields/...)?

+0

'instance.GetType()。FullName'说什么? –

+0

@ LasseV.Karlsen'Castle.Proxies。** BaseType ** Proxy','propertyInfo'不为null,因此mixin根据'proxyGenerationOptions'应用。 –

+0

我猜你不希望'IMixin'界面上的属性? –

回答

0

有可用的解决方法:

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

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

唯一的缺点:不能在类型的成员定义的任何属性,只是对类本身。