Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 具有任务范围的ninject(或其他IoC)?_C#_Design Patterns_Inversion Of Control_Ninject_Task Parallel Library - Fatal编程技术网

C# 具有任务范围的ninject(或其他IoC)?

C# 具有任务范围的ninject(或其他IoC)?,c#,design-patterns,inversion-of-control,ninject,task-parallel-library,C#,Design Patterns,Inversion Of Control,Ninject,Task Parallel Library,我不确定第三方物流的表面是否足以使其可行,因此,请随意指出替代模式 我试图弄清楚是否可以将Ninject用于理想情况下应该限定为特定根/父任务实例的注入依赖项 它有点类似于asp.net请求范围,但在这个场景中,它是一个控制台应用程序,创建N个不同的任务,这些任务将并行运行。我想知道是否有能力让Ninject基于每个根任务实例执行运行时依赖项注入,这样作为每个任务的一部分创建的对象图共享给定接口的相同实例,但不同的任务都有单独的实例 谢谢 [EDIT]继续搜索,根据“定义对象是其依赖项的范围”的

我不确定第三方物流的表面是否足以使其可行,因此,请随意指出替代模式

我试图弄清楚是否可以将Ninject用于理想情况下应该限定为特定根/父任务实例的注入依赖项

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

谢谢


[EDIT]继续搜索,根据“定义对象是其依赖项的范围”的描述,InNamedScope可能是正确答案如果我正确理解您的问题,
InNamedScope
是一个不错的选择。另一种选择是
InCallScope
。这篇文章很好地讨论了这些差异:

命名范围允许您在对象创建的绑定上定义 由绑定定义的范围是属于绑定的其他对象的范围 注入到已创建对象中的对象树

让我们在一个例子中看看这是如何工作的。想象你正在创造 具有多个工作表的类似Excel的应用程序

const string ScopeName = "ExcelSheet";
Bind<ExcelSheet>().ToSelf().DefinesNamedScope(ScopeName);
Bind<SheetPresenter>().ToSelf();
Bind<SheetCalculator>().ToSelf();
Bind<SheetDataRepository>().ToSelf().InNamedScope(ScopeName);
const string ScopeName=“ExcelSheet”;
Bind().ToSelf().DefinesNamedScope(ScopeName);
Bind().ToSelf();
Bind().ToSelf();
Bind().ToSelf().InNamedScope(ScopeName);

这里,
SheetDataRepository
使用范围内的
ExcelSheet
。这篇文章解释得更详细。

如果我正确理解了你的问题,那么在Namedscope中的
是一个不错的选择。另一种选择是
InCallScope
。这篇文章很好地讨论了这些差异。@neontapir-我已经做了一些测试,看起来InNamedScope确实可以很好地为我解决这个问题。如果你能添加一个与你的评论相同的答案,我很乐意接受一位主持人将我的回答转换为评论。我将重现答案。