Вопрос

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

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

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

Вопрос в том,:

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

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

Пример:

Я хотел бы иметь возможность сделать следующее:

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

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

    public IContainer Container { get; private set; }
}
Это было полезно?

Решение

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

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

public class INeedAContainer
{
    private readonly IContainer _container;

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

    // do stuff
}

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top