【问题标题】:Dynamic property interception动态属性拦截
【发布时间】:2016-12-03 18:59:26
【问题描述】:

我的类具有在 dll 中实现的属性(我无法更改实现,因为我没有庞大的源代码)。我不能用继承的类替换属性Name 的使用,因为项目在它使用的地方有数千行代码(Ctrl+h 没有帮助)。有人告诉我,我的问题可以通过 Castle 和 Unity 的动态属性拦截来解决。但我找不到任何可行的小例子。你能展示如何实现它吗?我读到 Castle 动态代理只拦截虚拟方法。是否可以通过接口拦截非虚方法?

namespace DynamicInterception
{
    // Placed int first dll
    public class Cargo
    {
        public string Name { get; set; }
    }

    //Placed in second dll
    public class Wagon
    {
        public Cargo Cargo { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Wagon wagon = new Wagon();
            wagon.Cargo = new Cargo() { Name = "Test" };
        }
    }
}

【问题讨论】:

  • 我认为你可以创建新的 {prop1="value", prop2="value2"};

标签: c# dynamic properties castle-dynamicproxy


【解决方案1】:

是的,如果成员是接口的一部分,您可以使用 Castle Dynamic Proxy 拦截类的非虚拟成员。查看documentation(特别是IInterceptor 上的部分),如果您遇到问题,请使用一些显示您遇到的问题的示例代码开始一个新问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 2015-06-26
    • 2011-02-26
    • 1970-01-01
    • 2022-09-23
    相关资源
    最近更新 更多