Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/122.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 莫克:无法施放_C#_Moq - Fatal编程技术网

C# 莫克:无法施放

C# 莫克:无法施放,c#,moq,C#,Moq,我有以下模拟: var MockHttpContext = new Mock<HttpContextBase>(); var MockPrincipal = new Mock<IPrincipal>(); MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object); 这就是错误: Unable to cast object of type 'IPrincipalProxy5c6adb1b

我有以下模拟:

var MockHttpContext = new Mock<HttpContextBase>();
var MockPrincipal = new Mock<IPrincipal>();

MockHttpContext.SetupGet(h => h.User).Returns(MockPrincipal.Object);
这就是错误:

Unable to cast object of type 'IPrincipalProxy5c6adb1b163840e192c47295b3c6d696' 
to type 'MyProject.Web.CustomPrincipal'.

我的CustomPrincipal实现了IPrincipal接口。那么,有人能解释一下我为什么会出现这个错误,以及我如何解决它吗?

同样的原因,这是行不通的

class WoodDuck : IQuack {}
class RealDuck : IQuack {}
//
IQuack myQuacker = new WoodDuck();
RealDuck myDuck = (RealDuck) myQuacker;

您不能强制转换它的原因是因为MOQ正在创建自己的类来实现IPrinciple。特别是IPrincipalProxy 5C6ADB163840E192C47295B3C6D696。但仅仅因为这两个类实现了相同的接口,并不意味着可以从一个类转换到另一个类。你为什么要投它?为什么您不能使用MOQ提供的IPrinciple上的成员?

除了我的答案之外,这里还有一个提示:var是一种只有在您知道发生了什么情况时才可以使用的快捷方式。。。如果在不知道发生了什么的情况下使用var,代码将受到影响。(虽然使用var不是这个问题的根源)感谢您的回复,我将Yuriy的答案标记为正确答案,因为他解释说moq创建了自己的类。因为我的CustomPrincipal有一些我需要的额外方法。在我有自己的接口ICustomPrincipal之前,我曾经嘲笑过它,但它也不起作用。我将把它标记为答案。我有预感Moq会创建自己的类,但不确定,所以我问。再次感谢。
class WoodDuck : IQuack {}
class RealDuck : IQuack {}
//
IQuack myQuacker = new WoodDuck();
RealDuck myDuck = (RealDuck) myQuacker;