私はIFoo
という名前のインタフェースを持っています。このインタフェースの実装は、コンストラクタにFileInfo
を受け取ります。問題は、私はそれが解決されるまでFoo
インスタンスに渡す必要があるFileInfo
わからないですUnityを使用して、「モデル」を解決済みの型に渡す必要がありますか?
container.RegisterType<IFoo, Foo>();
:私のブートストラップでは、私はそれがこのように設定しています。私は1つを持って、コンストラクタに渡す必要があります。
以前の投稿では、パラメータの上書きと、container.Resolve
の使用をお勧めしていますが、これは一般的に悪いことです。
私がする必要があることを達成するための推奨されるアプローチはありますか?
TLDR:私はそれが眉をひそめていない、このような何かをできるようにする必要があります:
container.Resolve<IFoo>(*pass my constructor arg here*)
私はその結論に自分自身をもたらしました。オブジェクトを構築するのがどれほど難しいかを考えて、クラスの設計に根本的な問題があるかどうかを検討しました。私はコンストラクタから新しいメソッドに引数を移動し、問題は手軽に解決しました。セイジアドバイス。ありがとうございました。 –
注意: 'FileInfo'をある種の' IFoo.Initialize(FileInfo) 'メソッドに移動した場合、コンポーネントは初期化時に実行時データを必要としますが、今度は[Temporal Coupling](http:// blog。 ploeh.dk/2011/05/24/DesignSmellTemporalCoupling/)も同様です。 – Steven
問題のクラスはファイルIOを提供します。これは、標準のOpen、Read、Close操作を持つ単純化されたデシリアライザです。それだけです。時間的なカップリングの量は、私の考えでは受け入れられます。時間的結合を避けることは、最初にコンストラクタに 'FileInfo'を置くことになったのですが、この*特定の*では、時空間結合は2つの悪のうちの小さいものです。 (文章中の "時間的"を適切に使用するためのボーナスポイント!!) –