Tôi sử dụng Simple Injector làm thùng chứa IoC của mình. SimpleInjector sử dụng this simple technique to handle mixed life style for Per Thread and Per Web RequestSử dụng các phụ thuộc trên nhiều luồng với 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;
});
Thật không may (và rõ ràng!), Ở đâu đó trong lớp UnitOfWork tôi này đem lại cho tôi một vấn đề khi tôi sử dụng Parallel.ForEach và cố gắng gọi vào nhiều trường hợp của các lớp Repository song song như chỉ đầu tiên của chủ đề tìm thấy một giá trị trong HttpContext.Current
using (TransactionScope scope = new TransactionScope())
{
Parallel.ForEach(new List<IRepository>() { _repository1, _repository2 ... },
(repository) =>
{
repository.Commit();
});
scope.Complete();
}
Bây giờ mà tôi đã viết xong ra các câu hỏi tôi có thể thấy tôi có thể yêu cầu những điều không thể hoặc một cái gì đó ngu ngốc ... nhưng cái quái gì. .. điều này có thể được thực hiện? Có thể đăng ký một yêu cầu/chủ đề có sẵn cho nhiều chủ đề nội bộ không?