Простая фабрика с использованием StructureMap - PullRequest
2 голосов
/ 05 августа 2009

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


Я уверен, что упускаю что-то простое.

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

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

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; 
    } 
} 

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

Ответы [ 2 ]

3 голосов
/ 05 августа 2009

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

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

0 голосов
/ 05 августа 2009

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

...