C# 从现有对象创建代理

C# 从现有对象创建代理,c#,castle-dynamicproxy,C#,Castle Dynamicproxy,使用Castle.DynamicProxy,从现有类实例创建代理的最佳方法是什么 // The actual object Person steve = new Person() { Name = "Steve" }; // Create a proxy of the object Person fakeSteve = _proxyGenerator.CreateClassProxyWithTarget<Person>(steve, interceptor) // fakeSte

使用Castle.DynamicProxy,从现有类实例创建代理的最佳方法是什么

// The actual object
Person steve = new Person() { Name = "Steve" };

// Create a proxy of the object
Person fakeSteve = _proxyGenerator.CreateClassProxyWithTarget<Person>(steve, interceptor)

// fakeSteve now has steve as target, but its properties are still null...
以下是拦截器类:

public class PersonInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {   
        Person p = invocation.InvocationTarget as Person;

        if (invocation.Method.Name.Equals(get_Name)
        {
            LoadName(p);
        }
    }

    private void LoadName(Person p)
    {
        if (string.IsNullOrEmpty(p.Name))
        {
            p.Name = "FakeSteve";
        }
    }
}

如果Person类只有非虚拟属性,则代理无法访问它们。尝试将属性设置为虚拟


名称是一个虚拟财产。问题更新了个人定义。好的,那么你的拦截器做什么呢?想法是延迟加载一些(虚拟)属性。好的,但是拦截器真正做什么呢?您可以添加实现吗?这确实是问题的一部分,似乎我需要使用CreateClassProxy iso CreateClassProxyWithTarget来保持所有非虚拟成员的同步。
public class PersonInterceptor : IInterceptor
{
    public void Intercept(IInvocation invocation)
    {   
        Person p = invocation.InvocationTarget as Person;

        if (invocation.Method.Name.Equals(get_Name)
        {
            LoadName(p);
        }
    }

    private void LoadName(Person p)
    {
        if (string.IsNullOrEmpty(p.Name))
        {
            p.Name = "FakeSteve";
        }
    }
}