我想實踐手動依賴注入(沒有框架),以消除我的代碼中的緊耦合。這只是爲了練習 - 我沒有具體的實現。並行處理的依賴注入
到目前爲止簡單的構造函數注入工作正常。
但是,我不能解決如何創建一個緊密耦合,當一個類必須使用並行循環內的另一個。例如:
public class Processor
{
private IWorker worker;
public Processor(IWorker worker)
{
this.worker = worker;
}
public List<string> DoStuff()
{
var list = new List<string>();
for (int i = 0; i < 10; i++)
{
list.Add(worker.GetString());
}
return list;
}
public List<string> DoStuffInParallel()
{
var list = new System.Collections.Concurrent.ConcurrentBag<string>();
Parallel.For(0, 10, i =>
{
//is there any trivial way to avoid this??
list.Add(new Worker().GetString());
});
return list.ToList();
}
}
public class Worker : IWorker
{
public string GetString()
{
//pretend this relies on some instance variable, so it not threadsafe
return "a string";
}
}
避免明顯的事實,即一個平行環路會比在上述情況下的標準循環慢,我怎麼能寫Processor.DoStuffInParallel()
方法,以避免對Worker
類的當前硬依賴?脫鉤這一
相關:https://stackoverflow.com/questions/13982600/using-dependencies-on-multiple-threads-with-parallel-foreach – Steven