StructureMap, ObjectFactory и IContainer - PullRequest
2 голосов
/ 26 января 2010

Я работаю с StructureMap для своих нужд IoC.

Для удобства тестирования я передаю IContainer экземпляров везде, где это возможно, обычно в качестве параметров конструктора. Для удобства я бы хотел иметь возможность использовать ObjectFactory для конструктора без параметров.

Самый простой способ (я думал) сделать это - просто получить класс IContainer класса ObjectFactory и передать его другому конструктору. К сожалению, я нигде не могу найти этот экземпляр публично раскрытым.

Вопрос:

Есть ли способ получить IContainer в ObjectFactory, чтобы я мог обрабатывать его так же просто, как предоставленный пользователем экземпляр?

В качестве альтернативы, есть ли способ скопировать конфигурацию ObjectFactory в новый экземпляр Container?

* * Пример тысячи двадцать-одина: * ** 1023 тысячу двадцать две *

Я бы хотел сделать следующее:

public class MyClass
{
    public MyClass()
    {
        Container = ... // The ObjectFactory container instance.
    }

    public MyClass(IContainer container)
    {
        Container = container;
    }

    public IContainer Container { get; private set; }
}

1 Ответ

5 голосов
/ 27 января 2010

ObjectFactory предоставляет свойство Container, которое дает вам искомый IContainer.

В любое время, когда вам нужен IContainer (который не должен быть часто), вы всегда можете получить зависимость от него в своем классе ctor.

public class INeedAContainer
{
    private readonly IContainer _container;

    public INeedAContainer(IContainer container)
    {
        _container = container;
    }

    // do stuff
}

Я не думаю, что есть способ клонировать IContainer. Существует метод container.GetNestedContainer (), который позволяет вам сохранять свои переходные процессы одинаковыми в течение всего времени существования вложенного контейнера. Вложенные контейнеры часто используются в операторе «using» и очень удобны для контроля состояния вещей, таких как границы транзакций базы данных.

...