我希望您可以告诉我如何使用Ninject来实现以下内容:
我有一个多线程应用程序,大约同时运行20个独立的线程。在应用程序启动时,我使用InThreadScope()通过Ninject将接口绑定到对象,并且所有功能都正常。每个线程接收特定于其线程的对象(每个对象的构造函数会实例化一些特定于线程的标志)。
每个线程执行的大部分工作都是等待数据存储完成处理。为了进一步优化线程,我们在主要的20个线程中实施了Parallel.ForEach逻辑。我希望由Parallel.ForEach生成的线程获取与其父线程相同的绑定。但是,在Parallel.ForEach内部,我无法简单地将接口重新绑定到适当的对象,因为我不知道绑定的对象是什么 - 在Parallel.ForEach内部,我只能使用接口进行操作。
在循环开始之前正确地检索内核中的绑定,并以通用方式重新绑定它们的正确方法是什么?
编辑:尝试包含详细的逻辑/伪代码:
每个线程一旦启动就会执行以下操作:
Kernel.Bind<ILoggingContext>().To<Application1LoggingContext>().InThreadScope();
然而,当Parallel.ForEach()启动时,从各个线程内部,我就不再能够访问Application1LoggingContext对象,并且无法重新绑定ILoggingContext到它上面。这是因为Parallel.ForEach()是从一个基类运行的,不知道需要绑定到哪个应用程序LoggingContext。这是在每个应用程序启动时完成的,启动20个大线程。
我想修改基类,即启动Parallel.ForEach()并确保在每个由Parallel.ForEach新创建的线程内部,ILoggingContext仍然绑定到Application1LoggingContext - 通用地,以便我可以执行以下操作:
var ctx = Kernel.Get<ILoggingContext>();