ninject (или другой IoC) с областью задач?


Я не уверен, что поверхности TPL достаточно для того, чтобы это было жизнеспособным, и поэтому не стесняйтесь просто указывать альтернативные шаблоны, которые работают вместо этого. :)

Я пытаюсь выяснить, могу ли я использовать Ninject для введенных ctor зависимостей, которые в идеале должны быть ограничены конкретным экземпляром корневой/родительской задачи.

Это чем-то похоже на asp.net область запроса, но в этом сценарии это консольное приложение, создающее N различных задач, которые будут выполняться параллельно. Мне интересно, если существует возможность заставить Ninject выполнять инъекцию зависимостей среды выполнения на основе каждого из этих корневых экземпляров задачи таким образом, что граф объектов, созданный как часть каждой задачи, использует одни и те же экземпляры данного интерфейса, но все разные задачи имеют отдельные экземпляры.

Спасибо!

[EDIT] продолжая поиск, похоже, что InNamedScope может быть правильным ответом, основанным на описании " определите, что объекты являются областью для их зависимости "

1 6

1 ответ:

Если я правильно понял ваш вопрос, InNamedScope - это хороший выбор. Другой альтернативой является InCallScope. В этом блоге хорошо обсуждаются различия:

Именованная область позволяет определить в привязке, что объект создан под привязкой понимается область видимости для других объектов, входящих в состав дерево объектов, которое вводится в созданный объект.

Давайте посмотрим, как это работает на примере. Представьте, что вы создаете приложение типа Excel это имеет несколько листов....
const string ScopeName = "ExcelSheet";
Bind<ExcelSheet>().ToSelf().DefinesNamedScope(ScopeName);
Bind<SheetPresenter>().ToSelf();
Bind<SheetCalculator>().ToSelf();
Bind<SheetDataRepository>().ToSelf().InNamedScope(ScopeName);

Здесь SheetDataRepository использует ExcelSheet, который находится в области действия. В статье это объясняется более подробно.