动态属性拦截

本文关键字:属性 动态 | 更新日期: 2023-09-27 17:59:13

我有一些类的属性在dll中实现(我不能更改实现,因为我没有庞大的源代码)。我不能用继承的类替换属性Name的使用,因为项目在它使用的地方有数千行代码(Ctrl+h没有帮助)。有人告诉我,我的问题可以通过穿越城堡和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" };
        }
    }
}

动态属性拦截

是的,使用Castle动态代理,如果类的非虚拟成员是接口的一部分,则可以拦截该成员。查看文档(特别是关于IInterceptor的部分),如果您有问题,请使用一些显示问题的示例代码开始新问题。