Как я могу смешивать атрибуты с Dynamic Proxy, определенным в экземплярах mixin?

У меня есть следующие mixin определены:

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

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

Это вводится с помощью следующего "генерации прокси":

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 нулевой.

Как я могу смешать конкретный экземпляр, включая атрибуты, определенные в типе (в свойствах / классе / методах / полях /...)?

1 ответ

Решение

Существует обходной путь:

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

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

Единственный недостаток: вы не можете определить какие-либо атрибуты для членов типа, только для самого класса.

Другие вопросы по тегам