Unity无法解析动态模拟的类

时间:2012-09-10 10:35:36

标签: c# vb.net prism unity-container

设置

  • 解决方案使用棱镜
  • 用VB编写的模块项目
  • 用C#编写的测试项目

在我的单元测试中,我模拟了模块使用的服务并传递它们,但是当模块尝试解析时,它会因以下异常而失败

    {"Resolution of the dependency failed, type = "UnderwritingWorkflow.Common.Services.IValidationService", name = "(none)".
Exception occurred while: while resolving.
Exception is: InvalidOperationException - The current type, UnderwritingWorkflow.Common.Services.IValidationService, is an interface and cannot be constructed. Are you missing a type mapping?

在例外时,容器是:

解决UnderwritingWorkflow.Common.Services.IValidationService,(无) “}

以下是使用UnityContainer注册对象的代码:

var validationService = new Mock<IValidationService>(MockBehavior.Strict);

validationService.Setup(x => x.Validate(Moq.It.IsAny<object>()))
                 .Returns(() => new ValidationResults());

Container.RegisterInstance(validationService.Object);

另外如果在注册之后尝试从c#直接解析IServiceValidation(从构造函数中)似乎有效:

Container.Resolve<IValidationService>();

为什么会发生这种情况?

注意:我正在使用Moq模拟框架,它在运行时创建类,我想知道它是否是VB的限制,不允许我使用它?

1 个答案:

答案 0 :(得分:1)

我找到了造成这个问题的原因,这是Moq框架的局限性。显然Moq不能模拟静态方法,包括扩展方法和Container.Resolve是一个扩展方法,因此它失败了。