Передающие аргументы конструктора при использовании StructureMap

Я использую StructureMap для своего DI. Предположите, что у меня есть класс, который берет 1 аргумент как:

public class ProductProvider : IProductProvider
{
     public ProductProvider(string connectionString)
     { 
         ....
     }
}

Я должен указать "connectionString во времени выполнения, когда я получаю экземпляр IProductProvider.

Я настроил StructureMap следующим образом:

ForRequestedType<IProductProvider>.TheDefault.Is.OfConcreteType<ProductProvider>().  
WithCtorArgument("connectionString");

Однако я не хочу называть EqualTo ("что-то...") методом здесь, поскольку мне нужно некоторое средство для динамичного определения этого значения во времени выполнения.

Мой вопрос: как я могу получить экземпляр IProductProvider при помощи ObjectFactory?

В настоящее время у меня есть что-то как:

ObjectFactory.GetInstance<IProductProvider>();  

Но как Вы знаете, это не работает...

Любой совет значительно ценился бы.

40
задан Mosh 13 May 2010 в 02:17
поделиться

2 ответа

Я сам нашел ответ! Вот решение:

ObjectFactory.With("connectionString").EqualTo(someValueAtRunTime).GetInstance<IProductProvider>();

Надеюсь, это поможет другим, кто столкнулся с той же проблемой.

32
ответ дан 27 November 2019 в 01:27
поделиться

Я предлагаю объявить это с помощью конфигурации StructureMap. Использование немного более нового кода StructureMap:

For<IProductProvider>().Use<ProductProvider>
  .Ctor<string>("connectionString").Is(someValueAtRunTime);

Таким образом, вы не обременяете свой клиентский код необходимостью знать значение и можете хранить конфигурацию IoC отдельно от основного кода.

54
ответ дан 27 November 2019 в 01:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: