动态属性拦截

时间:2016-07-29 06:58:30

标签: c# dynamic properties castle-dynamicproxy

我的类具有在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" };
        }
    }
}

1 个答案:

答案 0 :(得分:0)

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