Używam Simple Injector jako mojego kontenera IoC. SimpleInjector wykorzystuje this simple technique to handle mixed life style for Per Thread and Per Web RequestKorzystanie z zależności na wielu wątkach z 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;
});
Niestety (i oczywiście!), Gdzie indziej w mojej klasie UnitOfWork to daje mi problem podczas korzystania Parallel.ForEach i spróbuj zadzwonić do wielu wystąpień klasy Repository równolegle jak tylko pierwszy z wątków wyszukuje wartość w HttpContext.Current
using (TransactionScope scope = new TransactionScope())
{
Parallel.ForEach(new List<IRepository>() { _repository1, _repository2 ... },
(repository) =>
{
repository.Commit();
});
scope.Complete();
}
teraz, gdy skończę pisać na pytanie widzę ja prawdopodobnie prośbą o niemożliwe lub coś głupiego ... ale co do cholery. ... czy można to zrobić? Czy pojedyncza rejestracja zgłoszeń/wątków może zostać udostępniona wielu wątkom wewnętrznym?