有時我需要獲取某些構造信息的類。我不是在談論到其他對象(其將被注入),但有關(例如)的字符串,其持有唯一的參考信息:DI容器:如何將配置傳遞給對象
// Scoped as singleton!
class Repository
{
public Repository(InjectedObject injectedObject, string path) { ... }
}
你如何得到這個字符串注入?一個方法可行是編寫Init()
方法並避免噴射的字符串:
class Repository
{
public Repository(InjectedObject injectedObject) { ... }
public void Init(string path) { ... }
}
另一個可能性是所述信息包裝成一個對象,其中可被注入:
class InjectedRepositoryPath
{
public InjectedRepositoryPath(string path) { ... }
public string Path { get; private set; }
}
class Repository
{
public Repository(InjectedObject injectedObject, InjectedRepositoryPath path) { ... }
}
這樣我d在我的DI容器的初始化期間必須創建一個InjectedRepositoryPath
的實例並註冊這個實例。但是我需要爲每個類似的類提供這樣一個獨特的配置對象。
我當然可以解決RepositryFactory
代替Repository
對象,因此工廠會問我要的路徑:
class RepositoryFactory
{
Repository Create(string path) { ... }
}
但同樣,這是一個工廠只爲一個單獨的對象...
或者,最後,由於路徑將會從配置文件中提取,我可以跳過字符串周圍的傳球和我的構造函數讀取配置(這可能不是最優的,但有可能):
class Repository
{
public Repository(InjectedObject injectedObject)
{
// Read the path from app's config
}
}
你最喜歡的方法是什麼?對於非單身人士課程,您必須使用imho Init()
或工廠解決方案,但單身人士範圍的對象又如何?
非常有趣的鏈接,謝謝你的答案! – tanascius 2010-02-22 16:20:20