Отправлено это в группу 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, а также код реестра.
Я никогда не пробовал это так, но вы можете использовать метод .WithName() для предоставления имени экземпляра, а затем предположительно получить экземпляр через ObjectFactory.GetNamedInstance().
Другой подход (который я использовал успешно) должен был бы создать словарь, который действует как картографирование. Посмотрите там тип, а затем получите экземпляр этого типа через ObjectFactory.
Что касается регистрации, я думаю, вы захотите использовать Условное строительство объектов.