望着這answer on SO,我有點在下面的「原則」困惑:依賴注入 - 正確的地方注入
應用好萊塢原則
好萊塢原則DI方面說:不要撥打DI Container,它會給你打電話。
千萬不要直接通過調用 代碼中的容器來請求依賴關係。通過使用構造器注入隱式地詢問它。
但是如果我在我的DAL的存儲庫類,我想這種情況下提供給當TCP/IP客戶端連接其上創建一個對象?我應該在什麼地方進行注射?
現在,我有這樣的事情:
// gets created when a new TCP/IP client is connected
class Worker
{
private readonly IClient client;
public Worker(IClient client)
{
// get the repository
var repo = IoC.GetInstance<IClientMessagesRepo>();
// create an object which will parse messages
var parser = new MessageParser(client);
// create an object which will save them to repo
var logger = new MessageLogger(parser, repo);
}
}
我當我的應用程序啓動明顯不能創建實例。那麼我在哪裏注入回購?
非常感謝!
當應用程序被啓動爲什麼不能創建IClientMessageRepo實例?從給出的代碼,它遠不是'明顯的'... –
你可能也想引用這個答案:http://stackoverflow.com/questions/1410719/design-where-should-objects-be-registered-when -using-windsor/1410738#1410738 –
@Mark:不,對不起,我的意思是,我不能要求容器在開始時創建* Worker *實例。我*可以*創建回購實例,然後傳遞它,但我使用一個回購每個實體,所以我覺得傳遞一堆比使用容器來根據需要獲取它們更復雜。 – doe