2016-07-29 217 views
0

我有在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" }; 
     } 
    } 
} 
+0

我认为你可以像这样创建新的{prop1 =“value”,prop2 =“value2”}; –

回答

0

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