gpt4 book ai didi

c# - 不继承属性的接口(interface)代理

转载 作者:行者123 更新时间:2023-11-30 23:12:58 25 4
gpt4 key购买 nike

使用 Castle DynamicProxy 创建接口(interface)代理时,似乎创建的代理对象总是“继承”接口(interface)的属性。

一般来说,这不是真正的问题,但在我的例子中,我使用代理在运行时生成 WCF 服务实现。该接口(interface)有一个ServiceContractAttribute ,并且当实现类型(服务行为)也具有该属性时,WCF 真的不喜欢它。

请看下面的例子:

var generator = new ProxyGenerator();

var interceptor = new ExampleInterceptor();
var proxy = generator.CreateInterfaceProxyWithoutTarget(typeof(ITest), interceptor);

proxy.GetType().CustomAttributes.Select(a => a.AttributeType.Name).Dump();
// SerializableAttribute, XmlIncludeAttribute, ServiceContractAttribute

typeof(Test).CustomAttributes.Select(a => a.AttributeType.Name).Dump();
// (empty)
public class ExampleInterceptor : IInterceptor
{
public void Intercept(IInvocation invocation) { }
}

[ServiceContract]
public interface ITest { }

public class Test : ITest { }

查看代理类型的属性时,我得到以下三个:SerializableAttributeXmlIncludeAttributeServiceContractAttribute。所以 DP 不仅复制了 ServiceContractAttribute,它还添加了两个(我不太关心那些)。如果我将其与我的接口(interface)的手动实现进行比较,我不会得到任何类型。

因此 DP 中确实添加了这些属性。有什么方法可以影响该属性的生成,以阻止 DP 添加接口(interface)的属性?

最佳答案

您可以使用AttributesToAvoidReplicating 来避免特定属性复制:

AttributesToAvoidReplicating.Add<ServiceContractAttribute>();

关于c# - 不继承属性的接口(interface)代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43842317/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com