Как я могу смешивать атрибуты с 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);
Единственный недостаток: вы не можете определить какие-либо атрибуты для членов типа, только для самого класса.