从具体类生成拦截代理?

Joh*_*rth 5 c# dynamic-proxy

我需要创建一个拦截类中属性的代理.我知道如何使用接口创建一个带有Emit的动态代理,但是如果我没有接口呢?我见过使用RealProxy的示例(如下所示:有没有办法在设置类的任何属性时调用方法?)但是是否可以使用类型生成和发出来实现相同的功能?如果可能的话,我不希望具体类的"所有者"看到任何MarshalByRefObject的痕迹(见下文)......

我相信Castle能够做到这一点,但也许它正在使用RealProxy?

User user = Create<User>();

public class User
{
    public string Name { get; set; } 
}

public T Create<T>()
{
    //magic happens here... :)
    return (T)GenerateInterceptingProxyFromT(typeof(T));
}
Run Code Online (Sandbox Code Playgroud)

Yau*_*aur 0

我刚刚开始搞乱postshrp,Miguel 提到的 AOP 工具之一,在功能上做你想做的事情。它使用“静态编织”在编译时注入代码,因此对消费者来说应该是不可见的。显然,您需要修改要检测的代码才能使其正常工作。这个问题
的答案建议使用分析器 API,如果 PostSharp 或 Castle 不能满足您的需要,这可能是您的一个选择。