Я использую 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>();
Но как Вы знаете, это не работает...
Любой совет значительно ценился бы.
Я сам нашел ответ! Вот решение:
ObjectFactory.With("connectionString").EqualTo(someValueAtRunTime).GetInstance<IProductProvider>();
Надеюсь, это поможет другим, кто столкнулся с той же проблемой.
Я предлагаю объявить это с помощью конфигурации StructureMap. Использование немного более нового кода StructureMap:
For<IProductProvider>().Use<ProductProvider>
.Ctor<string>("connectionString").Is(someValueAtRunTime);
Таким образом, вы не обременяете свой клиентский код необходимостью знать значение и можете хранить конфигурацию IoC отдельно от основного кода.