Инъекция заглушки StructureMap - PullRequest
1 голос
/ 13 сентября 2011

Я использую StructureMap и пытаюсь зарегистрировать временную реализацию для интерфейса (заглушка).

После прочтения этой статьи я придумал следующую настройку:

Определение интерфейса:

public interface IConsoleWriter
{
    void Write(string message);
}

Обычная реализация:

public class ConsoleWriter : IConsoleWriter
{
    public void Write(string message)
    {
        Console.WriteLine("That's the message: '{0}'", message);
    }
}

Поддельная реализация:

public class FakeConsoleWriter : IConsoleWriter
{
    public void Write(string message)
    {
        Console.WriteLine("That's a fake writer who does not care about your message.");
    }
}

Теперь, определив все это, я использую следующий сценарий:

    static void TestTemporaryStub()
    {
        // register the regular implementation as default
        ObjectFactory.Initialize(x => x.For<IConsoleWriter>().Use<ConsoleWriter>());

        var writer1 = ObjectFactory.GetInstance<IConsoleWriter>();
        writer1.Write("abc");

        // temporarily inject a fake implementation
        ObjectFactory.Inject(typeof(IConsoleWriter), new FakeConsoleWriter());

        var writer2 = ObjectFactory.GetInstance<IConsoleWriter>();
        writer2.Write("abc");

        // attempt to reset the settings to default
        ObjectFactory.ResetDefaults();

        var writer3 = ObjectFactory.GetInstance<IConsoleWriter>();
        writer3.Write("abc");
    }

В приведенном выше коде я прошу контейнер StructureMap три раза получить реализацию IConsoleWriter:

  1. После того как контейнер инициализирован для использования обычной реализации - он возвращает обычную реализацию -> ОК.
  2. После внедрения ложной реализации -> возвращает ложную реализацию -> ОК.
  3. После возврата к значениям по умолчанию -> должен вернуть обычную реализацию (ConsoleWriter), но он все равно возвращает фальшивку -> Not Ok.

Я что-то здесь упускаю?

...