Правильное внедрение TDD + Dependency Injection в Akka.net

У меня есть и агент, который будет читать каталог X и создавать дочерний агент для каждого найденного подкаталога.

Для моей тестовой среды я использовал пакет System.IO.Abstractions, который создает интерфейс IFileSystem и его реализацию (для обычного использования программы).

Агент (для каталога X) использует Autofac DI для создания дочерних агентов (поскольку нам нужно дать им зависимость от IFileSystem и, возможно, многое другое в будущем):

var props = Context.DI().Props<DirectoryReader>();
var directoryAgent = Context.ActorOf(props, "DirectoryReader");

Мои тесты выглядят так:

public class DirectoryReaderTests : Akka.TestKit.Xunit2.TestKit 
{
    public DirectoryReaderTests()
        : base(@"akka.loglevel = DEBUG")
    {
        var builder = new ContainerBuilder();
        builder.RegisterType<FileSystem>().As<IFileSystem>();

        var container = builder.Build();  // <--- how do I use this with TestKit
    }

    [Fact]
    public void CreatesAgentForEachSubdirectory()
    {
        EventFilter.Info()
            .Expect(3, () => GetTargetAgent(ExistingDirPath));
    }

    private TestActorRef<DirectoryReader> GetTargetAgent(string path)
    {
        var filesystem = GetMockFileSystem();
        var target = ActorOfAsTestActorRef<DirectoryReader>(
            Props.Create(
                () =>
                    new DirectoryReader(
                        databaser,
                        filesystem.Object
                        )));
        target.Tell(new HashDirectory(path));
        return target;
    }
}

Теперь вопрос: как мне сказать TestKit, чтобы он действительно использовал мой контейнер для внедрения зависимостей?


person Marcin Konrad Ceglarek    schedule 08.08.2016    source источник
comment
посмотрите, как это похоже на меня: stackoverflow.com/questions/35367570/   -  person profesor79    schedule 08.08.2016