【问题标题】:Can a Castle DynamicProxy-generated proxy be forced to implement members as explicit interface implementations?可以强制 Castle DynamicProxy 生成的代理将成员实现为显式接口实现吗?
【发布时间】:2016-11-30 07:07:31
【问题描述】:

例如,假设我定义了一个接口如下:

public interface IWhatever
{
     string Text { get; set; }
}

我在 mixin 中实现它:

public class WhateverMixin : IWhatever
{
     string IWhatever.Text { get; set; }
}

当我构建某个给定类的代理时,整个显式实现的接口成员显示为隐式实现,因此它被发布

你知道我是否可以给 Castle DynamicProxy 一些选项来强制实现具有显式实现的接口?

【问题讨论】:

    标签: c# .net interface mixins castle-dynamicproxy


    【解决方案1】:

    不幸的是,DynamicProx 似乎对此没有任何选择。 ProxyGenerationOptionsMixinData 类中没有这样的设置,如果你查看代码(从MixinContributor 开始,导致MethodGenerator),你可以看到它只是简单地复制了名称和属性(可见性等)来自接口方法。

    【讨论】:

    • 只是好奇...你知道其他代理生成器已经实现了这样的功能吗?
    • 不,抱歉,我不知道任何其他代理生成器,尽管您可以使用TypePipe 来构建自己的。或者,如果您只需要 mixin 功能,您可以尝试 re-motion 的 re-mix - 该库默认显式实现 mixin 接口。 (请注意,我是这两个库的原始作者之一。)
    • 嗯,实际上另一种选择是使用 IL 编织和 PostSharp。归根结底,如果你想知道这个问答的背景是什么……那是因为我去年一直在开发一些开源:matiasfidemraizer.com/trackerdog
    • 它是 .NET 的通用更改跟踪库。我问这个问题是因为一些用户提供了以下问题:github.com/mfidemraizer/trackerdog/issues/10
    猜你喜欢
    • 1970-01-01
    • 2015-10-23
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    相关资源
    最近更新 更多