私は答えを見つけようとしていましたが、直接議論されていないようです。DI コンテナーを作成し、そこにすべてを登録してから、すべての依存関係を取得する必要な最上位クラスを解決する、アプリケーションのコンポジション ルートがあります。これはすべて内部で行われているため、コンポジション ルートの単体テストが難しくなります。仮想メソッド、保護されたフィールドなどを実行できますが、単体テストを実行できるようにするためだけにそのようなものを導入することはあまり好きではありません。他のクラスはすべてコンストラクター注入を使用するため、大きな問題はありません。問題は、コンポジションのルートをテストすることに意味があるのかということです。いくつかの追加のロジックがありますが、多くはなく、ほとんどの場合、アプリケーションの起動中にエラーが発生します。私が持っているいくつかのコード:
public void Initialize(/*Some configuration parameters here*/)
{
m_Container = new UnityContainer();
/*Regestering dependencies*/
m_Distributor = m_Container.Resolve<ISimpleFeedMessageDistributor>();
}
public void Start()
{
if (m_Distributor == null)
{
throw new ApplicationException("Initialize should be called before start");
}
m_Distributor.Start();
}
public void Close()
{
if (m_Distributor != null)
{
m_Distributor.Close();
}
}