我使用Simple Injector作为IoC容器。 SimpleInjector使用this simple technique to handle mixed life style for Per Thread and Per Web Request使用Parallel.ForEach的多线程依赖关系
container.RegisterPerWebRequest<IWebRepository, Repository>();
container.RegisterLifetimeScope<IThreadRepository, Repository>();
container.Register<IRepository>(container.GetInstance<Repository>());
// Register as hybrid PerWebRequest/PerLifetimeScope.
container.Register<Repository>(() =>
{
Repository repository;
if (HttpContext.Current != null)
repository = (Repository)container.GetInstance<IWebRepository>();
else
repository = (Repository)container.GetInstance<IThreadRepository>();
return repository;
});
不幸的是(和明显!),其他地方在我的UnitOfWork类,这是给我的一个问题,当我使用Parallel.ForEach并尝试调用到库类的多个实例并行,因为只有第一个线程发现在HttpContext.Current
using (TransactionScope scope = new TransactionScope())
{
Parallel.ForEach(new List<IRepository>() { _repository1, _repository2 ... },
(repository) =>
{
repository.Commit();
});
scope.Complete();
}
值现在,我已经写完出了问题,我可以看到我可能缘木求鱼或一些愚蠢的事......但什么是地狱。 ..这可以做到吗?单个请求/线程注册是否可用于多个内部线程?