Передать динамические параметры в корень фабрики / композиции в Ninject (или, возможно, в любой контейнер) - PullRequest
1 голос
/ 30 января 2012

Вот пример.

foreach (var doc in documents)
{
    var processor = this.factory.Create();
    processor.Process(doc);
}

factory внутренне вызывает kernel.Get<IDocumentProcessor>().

Я бы хотел, чтобы время жизни всех зависимостей обработчика документов было "ограничено" этим корневым каталогом композиции. Эта конфигурация, кажется, делает то, что я хочу:

kernel.Bind<IEntityContext>().To<EntityContext>().InCallScope();

Теперь каждый граф объектов, укорененный в процессоре документов, имеет уникальный общий контекст сущности для доступа к базе данных. Но это

  1. влияет на все контексты сущностей во всем приложении (что может быть в порядке, но кажется трудно обнаружить), и
  2. только кажется, что работает для привязок, известных о статически.

Я думаю, что мой вопрос в том, как я могу добиться того же эффекта определения объема / управления временем жизни с помощью "контекстной" или динамической информации? Возможно, я хочу, чтобы сам экземпляр документа внедрялся во всех дочерних элементов нового корня:

    var processor = this.factory.Create(doc)
    processor.Process()

Спасибо!

1 Ответ

1 голос
/ 31 января 2012

С Ninject 3.0.0 вы можете сделать

kerne.Get<IProcessor>(new ConstructorArgument("doc", doc, true));

Но мне все еще кажется, что есть недостаток дизайна, в котором doc зависит от процессора.Было бы лучше создать процессор один раз и повторно использовать его для нескольких документов, передав документ методу Process.Я все еще не понимаю, в чем проблема с этим из-за того, что вопрос не показывает фактическую проблему.

...