Подтвердить что ты не робот

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

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

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

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

Я сконфигурировал StructureMap следующим образом:

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

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

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

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

ObjectFactory.GetInstance<IProductProvider>();  

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

Любые советы будут очень признательны.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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