带有任务范围的ninject(或其他IoC)?

Jam*_*ing 6 c# design-patterns ninject inversion-of-control task-parallel-library

我不确定TPL表面是否足够可行,因此,请随意指出替代的替代模式.:)

我试图找出是否可以将Ninject用于ctor注入的依赖项,理想情况下应将其作用域限定为特定的根/父Task实例.

它有点类似于asp.net请求范围,但在这种情况下,它是一个控制台应用程序,它创建N个并行运行的不同任务.我想知道是否有能力让Ninject根据每个根任务实例执行运行时依赖注入,这样作为每个任务的一部分创建的对象图共享给定接口的相同实例,但不同的任务全部有单独的实例.

谢谢!

[编辑]继续搜索,根据"定义对象是其依赖关系的范围"的描述,看起来InNamedScope 可能是正确的答案

neo*_*pir 4

如果我正确理解你的问题,InNamedScope是一个不错的选择。另一种选择是InCallScope。这篇博文对这些差异进行了很好的讨论:

命名作用域允许您在绑定上定义由该绑定创建的对象是其他对象的作用域,这些其他对象是注入到所创建的对象的对象树的一部分。

让我们通过一个例子来看看它是如何工作的。想象一下,您正在创建一个类似 Excel 的应用程序,具有多个工作表......

const string ScopeName = "ExcelSheet";
Bind<ExcelSheet>().ToSelf().DefinesNamedScope(ScopeName);
Bind<SheetPresenter>().ToSelf();
Bind<SheetCalculator>().ToSelf();
Bind<SheetDataRepository>().ToSelf().InNamedScope(ScopeName);
Run Code Online (Sandbox Code Playgroud)

在这里,SheetDataRepository使用的ExcelSheet是范围内的that。文章有更详细的解释。