如果接口代理列出了属性,如何获取接口代理返回的代理对象?

时间:2018-07-22 01:53:51

标签: c# entity-framework castle-dynamicproxy

我正在使用Entity Framework和Castle尝试并代理实体以更改属性的工作方式。

但是,当类Entity1包含另一个Entity2的集合时,我遇到了一些问题。可以代理Entity1的实例并操纵属性,但是其Entity2的集合不变。返回原始实体,并且无法拦截其属性。

我制作了一个演示来简化它。

public interface IEntity2
{ 
    string Value { get; set; }
}

public interface IEntity1<T>
    where T : IEntity2
{ 
    ICollection<T> Details { get; set; } 
}

public class Entity2
{
    public string Value { get; set; }
}

public class Entityt1 : IEntity1<Entity2>
{
    public ICollection<Entity2> Details { get; set; }
}

我正在生成代理,如下所示:

var source = new Entity1();
source.Details.Add(new Entity2 { Value = "A" });
source.Details.Add(new Entity2 { Value = "B" });
source.Details.Add(new Entity2 { Value = "C" });

var proxy = (new ProxyGenerator())
    .CreateProxyInterfaceWithTarget<IEntity1<Entity2>>(source, new Interceptor());

现在,如果我在proxy.Details中访问foreach,则会得到Entity2的实例。我希望能够接收以Entity2实例为源的代理。我只是不知道如何弥合这种差距。

我避免使用CreateProxyClassWithTarget,因为现有代码没有值类型属性的虚拟属性。

https://github.com/arthur-conde/DynamicProxyIssue

0 个答案:

没有答案