Построить цепочку зависимостей с аргументами в корне - PullRequest
3 голосов
/ 25 февраля 2011

I следующая цепочка зависимостей:

Handler() [depends on]--> Repository(string connectionString)

Итак, у меня есть IHandler, который зависит от IRepository, который, в свою очередь, требует строку подключения.Строка подключения является динамической и передается во время выполнения (поэтому ее нельзя прочитать из файла конфигурации и т. Д.)

Представьте, что система создает обработчик со следующим кодом:

var handler = ObjectFactory.GetInstance<IHandler>();

Это терпит неудачу, потому что не может быть удовлетворена зависимость Repository (connectionString).Моей следующей идеей было использование ExplicitArguments StructureMap для предоставления аргументов в начале построения цепочки зависимостей, то есть:

var arguments = new ExplicitArguments();
arguments.SetArg("connectionString", "SOME CONNECTION STRING");

var handler = ObjectFactory.GetInstance<IHandler>(arguments);

Это не удалось, потому что теперь StructureMap ожидает найти зависимость connectionString в Handler (и если он имеет, в любом случае, не передает эти аргументы в конструктор репозитория.)

Вопрос в следующем: Есть ли способ построить эту цепочку, предоставив аргументы вверху и позволив StructureMapвыяснить, что хранилищу нужен аргумент connectionString?

Ответы [ 2 ]

3 голосов
/ 25 февраля 2011
container.Configure(r => r
    .ForConcreteType<Repository>()
    .Configure.Ctor<string>().Is("some connection string"));
1 голос
/ 25 февраля 2011

Если вы оказываете влияние на Repository, я предлагаю вам изменить конструктор на IConnectionStringProvider и зарегистрировать экземпляр класса, реализующего этот интерфейс, в вашей фабрике объектов.

...