我需要代理代理的属性类型。所以案件将是:
我有IMyInterface接口:
public interface IMyInterface
{
public String Name {get; set;}
public Int Id {get;set;}
}
我可以很好地模拟界面,但我希望能够模拟,例如,Name属性。我意识到String不能被嘲笑,因为它是密封的。我希望看到的功能是:
IMyInterfaceMock.Name.Equals()
应由拦截器处理。我无法想象现有框架甚至可以实现这一点,因为我会改变属性的类型,但我想知道是否有一种聪明的方法来实现这一点。有什么方法可以插入代理生成并修改代理的属性的返回类型?
我认为DynamicProxy2不可能,但我想知道是否有人知道某些魔法。
答案 0 :(得分:1)
一个。您无法修改返回的类型,因为这意味着无效覆盖。 湾即使你可以,你也不能覆盖字符串上的任何东西,这是密封的,所以没有 - 在CLR上使用普通的强类型编程语言是不可能的。
答案 1 :(得分:0)
我意识到这种类型将成为无效的覆盖。我真正想要的是一种生成动态类型的方法。我使用System.Reflection.Emit类完成了这个。
我创建了一个动态类型,其中属性类型是一个众所周知的类型,然后我可以拦截。
我应该已经解释过我正在将代理对象写入PowerShell管道,因此并不真正关心发出的类型。我只需要一种评估比较运算符的方法。