Простая фабрика с использованием StructureMap

2

Отправлено это в группу structuremap. Мы только начали использовать структуру структуры на прошлой неделе и действительно копаем ее.


Я уверен, что мне не хватает чего-то простого.

Я пытаюсь воспроизвести следующий код, используя SM в моем factory. Я в порядке с зависимостью контейнера от класса factory. Консенсус в этой теме, казалось, состоял в том, что это было правильно подход: http://www.codeplex.com/unity/Thread/View.aspx?ThreadId=29697. Если есть лучший способ, я открыт для слушания других способов выполняя это.

В основном мой метод factory Create будет принимать значение перечисления (it может быть фактическим типом, но в любом случае это не что-то контролируемое контейнером) и должен возвращать правильный экземпляр. Обратите внимание, что типы возврата будут управляться SM. Я не хочу ставить все зависимостей в Ctor factory, так как может быть много (!).

public class PreSaveActionFactory : IPreSaveActionFactory 
{ 
    public IPreSaveAction Create(MyEnumType enumType) 
    { 
        IPreSaveAction action; 

        switch (enumType) 
        { 
            case MyEnumType.Value1: 
                //imagine this has 3 Ctor arguments 
                action = new Value1PreSaveAction(); 
                break; 
            case MyEnumType.Value2: 
                //and imagine this has 4 completely different Ctor arguments 
                action = new Value2PreSaveAction(); 
                break; 
            default: 
                throw new NotSupportedException(); 
        } 

        return action; 
    } 
} 

Я правильно ссылаюсь на правый раздел документов, вам не нужно напишите код для меня (хотя я не буду жаловаться:)). Я бы хотел знаете, как выглядит factory, а также код реестра.

Теги:
dependency-injection
structuremap
inversion-of-control

2 ответа

3
Лучший ответ

Я никогда не пробовал это так, но вы можете использовать метод .WithName() для предоставления имени экземпляра, а затем предположительно получить экземпляр через ObjectFactory.GetNamedInstance().

Другой подход (который я использовал успешно) должен был бы создать словарь, который действует как картографирование. Посмотрите там тип, а затем получите экземпляр этого типа через ObjectFactory.

  • 0
    Использование WithName () и GetNamedInstance () работает! Мне потребовалось немного времени, чтобы понять, так как я думал не о возвращаемых объектах как о существующих экземплярах, а скорее как об экземплярах по требованию. С тех пор я выполнил некоторую отладочную трассировку и чтение, и немного лучше понял. Спасибо за вашу помощь. Не могу проголосовать за ваш ответ, так как я, очевидно, слишком плохо знаком с SO.
0

Что касается регистрации, я думаю, вы захотите использовать Условное строительство объектов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню