2016-10-03 36 views
0

使用lightinject時,是否有任何方法使用外部配置文件中的字符串值來告訴容器註冊文件中提到的服務?這將在xml文件或web.config文件中。使用lightinject解析依賴關係通過xml文件或web.config

例如,在我的web.config以前的項目中我有下面這行

<add key="PersonRepository.Interface.IPersonRepository" value="PersonRepository.Db.DbRepository, 
    PersonRepository.Db, Version=1.0.0.0, Culture=neutral"/> 

我可以通過電話WebConfigurationManager獲得的價值。本示例將具體類PersonRepository.Db.DbRepository名稱作爲字符串獲取,然後可以使用該字符串來解析依賴關係。這是我過去使用的方法,但無法弄清楚如何對lightinject進行相同操作。這可能嗎?

道歉,如果這有點混亂,這是我第一次正確進入依賴注入。

非常感謝。


再次問候。我已經嘗試了幾天來實現你所描述的方法,但它沒有奏效。爲了簡明地證明這一點;

var myString = "hello"; 
Type stringType = Type.GetType(myString); 
container.Register<ICloneable, stringType>(); 

我從編譯器'stringType'得到的錯誤是一個變量,但是像一個類型一樣使用。

在此進一步閱讀;

How to use typeof or GetType() as Generic's Template?

看來這是不限的語言。任何想法都可以嗎?非常感謝。

回答

1

LightInject不直接處理XML文件,但您應該能夠通過配置管理器獲取類型,服務類型和實現類型。然後你需要使用類型Type.GetType(typeName)來解析類型,然後在容器中註冊該服務。這就是說,我強烈建議您將容器的配置從配置文件移動到代碼(組合根)中。在編譯之後,服務和實現類型之間的映射很少會發生變化,您將獲得強類型配置的好處。

+0

正是我需要的,謝謝你的幫助。 – Aeptitude

+0

你好。我已經嘗試了幾天來實現你所描述的方法,但它沒有奏效。爲了簡明地證明這一點; var myString =「hello」; 類型stringType = Type.GetType(myString); container.Register (); 我從編譯器中得到的錯誤'stringType'是一個變量,但是像一個類型一樣使用。 在此進一步閱讀; http://stackoverflow.com/questions/302577/how-to-use-typeof-or-gettype-as-generics-template 似乎這是限制語言。任何想法都可以嗎?非常感謝 – Aeptitude

+0

爲什麼我們不在GitHub上繼續這樣做?在LightInject回購中創建一個問題。然後用你正在嘗試做的事情創建另一個回購樣本,我們將公佈該回購 – seesharper