C# Autofac.ILifetimeScope:无法模拟或解析我的服务类
我已经在我的应用程序中为服务层创建了一个测试项目,一切正常,但是我需要模拟我的一个服务类,它存在于其他文件夹或名称空间中,但解决方案相同。因此,我尝试模拟服务类(IEmailService),但在调用'ResolveServiceInstance'函数时,它会转到'TearDown'(属性)方法来处理Autofac.ILifetimeScope的容器/对象。我不知道我哪里出错了,请帮我解决这个问题 模拟服务类的“设置”方法C# Autofac.ILifetimeScope:无法模拟或解析我的服务类,c#,unit-testing,mocking,autofac,teardown,C#,Unit Testing,Mocking,Autofac,Teardown,我已经在我的应用程序中为服务层创建了一个测试项目,一切正常,但是我需要模拟我的一个服务类,它存在于其他文件夹或名称空间中,但解决方案相同。因此,我尝试模拟服务类(IEmailService),但在调用'ResolveServiceInstance'函数时,它会转到'TearDown'(属性)方法来处理Autofac.ILifetimeScope的容器/对象。我不知道我哪里出错了,请帮我解决这个问题 模拟服务类的“设置”方法 public ILifetimeScope Container { ge
public ILifetimeScope Container { get; private set; }
[SetUp]
public void SetUpTest()
{
MockPermissionService = new Mock<IPermissionService>();
MockPermissionServiceProvider = new Mock<IPermissionServiceProvider>();
MockPlatformEmailService = new Mock<Platform.Services.IEmailService>();
Container = ServiceTestsSetUp.GlobalContainer.BeginLifetimeScope(builder =>
{
builder.Register(c => MockPermissionService.Object).As<IPermissionService>();
builder.Register(c => MockPermissionServiceProvider.Object).As<IPermissionServiceProvider>();
PreServiceResolve(builder);
});
Service = ResolveServiceInstance();
AddStaticData();
}
不幸的是,看起来您需要提供更多的信息。请用以下信息更新问题(不是评论!)。。。调用
ResolveServiceInstance
时,什么是TService
?为什么您要模拟IEmailService
,但不将其注册到生存期范围?何时处置生存期范围?AddStaticData()
是否与可能干扰的静态
字段有关?什么是preservicesolve()
?为了简化复制,您可以从中删除任何内容吗?与您看到的错误无关的事情?对不起,特拉维斯,我无法编辑我的问题,但我可以在这里解释这些事情。TService什么都不是,我们将服务类对象作为泛型传递。公共虚拟新TService服务{(获取{return(TService)base.Service;})。}。然后是用于模拟模型对象的静态数据。而PreServiceResolve是(受保护的内部操作PreServiceResolve=(范围)=>{};)TService
必须是某种东西。当调用Container.Resolve
时,非常重要的一点是您知道当时t服务的类型是什么-这就是引发异常的原因。看起来它是InEight.Platform.Services.EmailService
,并且没有在容器中注册-因此我的另一个问题是,为什么它模拟对象但没有注册它?@Travis。我是单元测试部分的新手,所以在模拟之前我不知道如何注册EmailService类。我想,我已经注册了。你能帮我用一些示例注册这个类吗?你的代码中有注册示例。您正在注册模拟权限服务。但是我不知道注册电子邮件服务是否能解决这个问题,因为这里没有足够的信息,正如我所提到的。没有我要求的答案,我帮不了你更多,对不起。
private TService ResolveServiceInstance()
{
return Container.Resolve<TService>();
}
DependencyResolutionException: None of the constructors found with 'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type 'InEight.Platform.Services.EmailService' can be invoked with the available services and parameters:
Cannot resolve parameter 'InEight.Platform.TenantInfo tenant' of constructor 'Void .ctor(InEight.Platform.TenantInfo, InEight.Platform.Site.Services.Contexts.ICoreDataContext, InEight.Platform.Logs.IAppLog)'.