我正在使用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
,因为现有代码没有值类型属性的虚拟属性。