Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/331.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# Autofac.ILifetimeScope:无法模拟或解析我的服务类_C#_Unit Testing_Mocking_Autofac_Teardown - Fatal编程技术网

C# 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

我已经在我的应用程序中为服务层创建了一个测试项目,一切正常,但是我需要模拟我的一个服务类,它存在于其他文件夹或名称空间中,但解决方案相同。因此,我尝试模拟服务类(IEmailService),但在调用'ResolveServiceInstance'函数时,它会转到'TearDown'(属性)方法来处理Autofac.ILifetimeScope的容器/对象。我不知道我哪里出错了,请帮我解决这个问题

模拟服务类的“设置”方法

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)'.