System.IO.Abstraction:Autofac.Core.DependencyResolutionException:'激活特定注册期间发生错误

问题描述 投票:0回答:1

背景

我开始使用 NuGet 包 System.IO.Abstractions 来对

File
方法(
File.Exists()
File.OpenRead()
File.Move()
等)进行单元测试。我在单元测试项目和产品代码项目中都安装了 NuGet。我没有安装任何其他相关软件包。我的单元测试运行良好。

在产品代码中

 private readonly System.IO.Abstractions.IFileSystem _fs;

 public MyClass(
     System.IO.Abstractions.IFileSystem fileSystem,
     ...
 )
 {
     _fs = fileSystem;
     ...
 }

在单元测试代码中

using System.IO.Abstractions;
...

private Mock<FileSystem> mockFS;
...

public MyClassTests()
{
    mockFS = new Mock<FileSystem>();
    ...

    sut = new MyClass(
        mockFS.Object,
        ...
    );
}

问题

即使单元测试有效,产品代码也会抛出错误:

Autofac.Core.DependencyResolutionException: 'An error occurred during the activation of a particular registration. See the inner exception for details...'

我尝试过的事情

  • System.IO.Abstraction 的 README.md 没有提到注册其
    FileSystem
  • 大概,我需要注册
    System.IO.Abstraction
    FileSystem
    (或
    IFileSystem
    ?)课程。我尝试过各种迭代
builder.RegisterType<IFileSystem>().AsImplementedInterfaces().InstancePerDependency();

但我似乎无法正确理解。

c# .net unit-testing io filesystems
1个回答
0
投票

解决方案

我最终尝试注册

builder.RegisterType<System.IO.Abstractions.FileSystem>()
    .AsImplementedInterfaces()
    .SingleInstance();

产品代码和测试代码均成功!

注意:使用混凝土

FileSystem
,而不是
IFileSystem

© www.soinside.com 2019 - 2024. All rights reserved.