用DI方法處理條件子工廠的體面方式是什麼? 該場景是注入到條目中的加載器對象取決於該條目的設置。最初我是將IoC容器注入工廠,並使用它來根據命名約定進行解析。但是,我真的很想保持工廠清潔的容器。依賴注入和工廠
工廠被注入到一個類中,該類將加載數據庫中的所有設置,然後使用工廠創建一組條目。該設置確定在給定條目內使用哪個裝載器。
編輯:更改代碼以更好地突出顯示實際問題。 問題是,必須同時支持多個數據庫管理器,如果情況並非如此,那麼它會很簡單。數據庫管理器類型由爲特定條目存儲的條目設置確定。
public class Entry : IEntry
{
private ISomething loader;
public Entry(ISomething something)
{
this.loader = something;
}
}
public class EntryFactory : IEntryFactory
{
IEntry BuildEntry(IEntrySetting setting)
{
//Use setting object to determine which database manager will be used
}
}
public class EntryManager
{
public EntryManager(IEntryFactory entryFactory)
{
var entrySettings = this.settings.Load();
foreach(var setting in entrySettings)
{
this.entries.Add(entryFactory.BuildEntry(setting));
}
}
}
我曾考慮具有子工廠,主要工廠註冊和解析他們的方式,但我不知道是否有更好的方法。
您有一個運行時輸入到依賴關係解析機制,所以我懷疑有一種方法來實現完整的容器獨立性。所以把它推到工廠似乎是你能做的最好的。您也可能會發現[Autofac的關係類型](http://code.google.com/p/autofac/wiki/RelationshipTypes)有趣。 –
正如我看到你正在你的入門構造函數中工作,這就是爲什麼整個DI和工廠人員不工作的問題。 loader.Load(); 讓構造函數只包含字段初始化。加載方法是做什麼的?它是否用數據填充入口對象?在這種情況下,這不是一個構造函數。工廠必須準備好將加載的數據用於輸入,從其他地方獲取。 –