我不确定TPL表面是否足够可行,因此,请随意指出替代的替代模式。 :)
我正在试图弄清楚我是否可以将Ninject用于ctor注入的依赖项,理想情况下应将其作用域限定为特定的根/父Task实例。
它有点类似于asp.net请求范围,但在这种情况下,它是一个控制台应用程序,它创建N个并行运行的不同任务。我想知道是否有能力让Ninject根据每个根任务实例执行运行时依赖注入,这样作为每个任务的一部分创建的对象图共享给定接口的相同实例,但不同的任务全部有单独的实例。
谢谢!
[EDIT] 继续搜索,根据“定义对象是其依赖项的范围”的描述,看起来InNamedScope 可能是正确的答案
答案 0 :(得分:4)
如果我理解你的问题,InNamedScope
是个不错的选择。另一种选择是InCallScope
。这个blog post对差异进行了很好的讨论:
命名范围允许您在对象创建的绑定上定义 通过绑定是其他对象的范围 注入到创建对象中的对象树。
让我们看看它如何在一个例子中起作用。想象一下,你正在创造 一个类似Excel的应用程序,它有多个工作表....
const string ScopeName = "ExcelSheet"; Bind<ExcelSheet>().ToSelf().DefinesNamedScope(ScopeName); Bind<SheetPresenter>().ToSelf(); Bind<SheetCalculator>().ToSelf(); Bind<SheetDataRepository>().ToSelf().InNamedScope(ScopeName);
此处,SheetDataRepository
使用范围内的ExcelSheet
。这篇文章更详细地解释了。