2017-04-17 43 views
0

我有一個接口,我們將其稱爲IFoo,因爲參數的緣故,它適用於文件。該接口的實現在其構造函數中接收到FileInfo。在我的引導程序,我有它設置如下:使用Unity時,我應該如何將「模型」傳遞給解析類型?

container.RegisterType<IFoo, Foo>(); 

的問題是,我不知道哪個FileInfo我需要傳遞到Foo實例,直到它被解決。我會有一個,我需要將它傳遞給構造函數。

我見過的老帖子推薦使用參數覆蓋和container.Resolve的用法,但我知道這通常是一種不好的做法。

是否有推薦的方法來實現我需要做的事情?

TLDR:

container.Resolve<IFoo>(*pass my constructor arg here*) 

回答

1

的問題是,我不知道我需要傳遞到它的FileInfo:我需要能夠做這樣的事情,那是沒有皺眉Foo實例,直到解決。

這意味着FileInfo運行時數據,而你的應用程序組件(您Foo)不應該要求施工期間運行時數據

請詳細閱讀this article以瞭解運行時數據不好的原因以及哪些解決方案。

+0

我自己得出這個結論。在考慮構建對象有多困難時,我考慮了它是否指示了類的設計的根本問題。我將構造函數的參數移至新方法,並且問題輕易地解決了它自己。賢者的忠告。謝謝。 –

+2

請注意:如果您將'FileInfo'移至某種'IFoo.Initialize(FileInfo)'方法,您的組件在初始化過程中仍然需要運行時數據,但現在您引入了[時間耦合](http:// blog。 ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/)。 – Steven

+0

有問題的類提供文件IO。這是一個簡化的解串器,具有標準的Open,Read,Close操作,就是這樣。在我看來,時間耦合的量是可以接受的。避免時間耦合是我首先在構造函數中放入FileInfo的原因,但在這個*特殊情況下,時間耦合是兩個邪惡中較小的一個。 (在句子中正確使用「時態」的積分!!) –

相關問題