0
我有一個接口,我們將其稱爲IFoo
,因爲參數的緣故,它適用於文件。該接口的實現在其構造函數中接收到FileInfo
。在我的引導程序,我有它設置如下:使用Unity時,我應該如何將「模型」傳遞給解析類型?
container.RegisterType<IFoo, Foo>();
的問題是,我不知道哪個FileInfo
我需要傳遞到Foo
實例,直到它被解決。我會有一個,我需要將它傳遞給構造函數。
我見過的老帖子推薦使用參數覆蓋和container.Resolve
的用法,但我知道這通常是一種不好的做法。
是否有推薦的方法來實現我需要做的事情?
TLDR:
container.Resolve<IFoo>(*pass my constructor arg here*)
我自己得出這個結論。在考慮構建對象有多困難時,我考慮了它是否指示了類的設計的根本問題。我將構造函數的參數移至新方法,並且問題輕易地解決了它自己。賢者的忠告。謝謝。 –
請注意:如果您將'FileInfo'移至某種'IFoo.Initialize(FileInfo)'方法,您的組件在初始化過程中仍然需要運行時數據,但現在您引入了[時間耦合](http:// blog。 ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/)。 – Steven
有問題的類提供文件IO。這是一個簡化的解串器,具有標準的Open,Read,Close操作,就是這樣。在我看來,時間耦合的量是可以接受的。避免時間耦合是我首先在構造函數中放入FileInfo的原因,但在這個*特殊情況下,時間耦合是兩個邪惡中較小的一個。 (在句子中正確使用「時態」的積分!!) –