如何将mixin属性与在mixin实例上定义的动态代理混合?
问题描述:
我有以下混入定义:如何将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/...)?
答
有可用的解决方法:
using System.Reflection.Emit;
using Castle.DynamicProxy;
var proxyGenerationOptions = new ProxyGenerationsOptions();
/* ... */
var customAttributeBuilder = new CustomAttributeBuilder(/* ... */);
proxyGenerationOptions.AdditionalAttributes.Add(customAttributeBuilder);
唯一的缺点:不能在类型的成员定义的任何属性,只是对类本身。
'instance.GetType()。FullName'说什么? –
@ LasseV.Karlsen'Castle.Proxies。** BaseType ** Proxy','propertyInfo'不为null,因此mixin根据'proxyGenerationOptions'应用。 –
我猜你不希望'IMixin'界面上的属性? –