Передача аргументов конструктора при использовании StructureMap - PullRequest
38 голосов
/ 13 мая 2010

Я использую 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>();  

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

Любой совет будет принята с благодарностью.

Ответы [ 2 ]

53 голосов
/ 20 мая 2010

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

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

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

32 голосов
/ 13 мая 2010

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

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

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

...