Ich verwende Simple Injector als meine IoC-Container. SimpleInjector verwendet this simple technique to handle mixed life style for Per Thread and Per Web RequestVerwenden von Abhängigkeiten zu mehreren Threads mit 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;
});
Leider (und natürlich!), An anderer Stelle in meiner UnitOfWork Klasse dies mir ein Thema zu geben, wenn ich Parallel.ForEach verwenden und versuche, in mehrere Instanzen der Repository-Klasse als nur parallel zu nennen die zuerst der Fäden findet einen Wert in HttpContext.Current
using (TransactionScope scope = new TransactionScope())
{
Parallel.ForEach(new List<IRepository>() { _repository1, _repository2 ... },
(repository) =>
{
repository.Commit();
});
scope.Complete();
}
Nun, da ich die Frage fertig bin ich, dass ich wahrscheinlich für die nicht oder nur etwas dumm ... aber was zum Teufel sehen auszuschreiben bin gefragt. .. kann das gemacht werden? Kann eine einzelne Anfrage/Thread-Registrierung mehreren internen Threads zur Verfügung gestellt werden?