6

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

我试图弄清楚我是否可以将 Ninject 用于 ctor-injected 依赖项,理想情况下,这些依赖项应该限定为特定的根/父 Task 实例。

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

谢谢!

[编辑]继续搜索,看起来 InNamedScope可能是基于“定义对象是其依赖项的范围”的描述的正确答案

4

1 回答 1

4

如果我正确理解您的问题,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范围内的。文章更详细地解释了。

于 2012-05-31T15:29:21.063 回答