依存性注入を使用するように既存のシステムをリファクタリングしており、その作業は順調に進んでいます。
しばらくして、社内ライブラリの多くが、使用しているDIフレームワークに依存するようになったことに気付きました。その結果、プロジェクト全体がこのサードパーティフレームワークに依存するようになりました。
共有ライブラリに依存させることで、すべての依存関係を分離することに皮肉を感じました。
私の最初の反応は、依存関係フレームワークのラッパーライブラリを作成することでした。したがって、必要に応じてこのフレームワークを置き換えることができます。関連する作業を推定した後、結果のAPIは既存のフレームワークに似ているため、置き換えがより困難になることに気付きました。だから私はその考えを捨てました。
私の懸念は、使用しているDIフレームワークが時代遅れになるか、交換する必要があることです。
DIを操作するときに、プロジェクトとDIフレームワーク間の結合を減らす開発パターンがありますか?
DIFramework.Get<IService>()
は実際には依存性注入ではありません。これは、Service Locatorと呼ばれる関連パターンです。多くの人がService Locatorを嫌っています。なぜなら、それはあなたをフレームワークに結びつけ、それがあまりにも簡単に悪用されるからです(シングルトンのように)。マーティンファウラーには、これらのパターンに関する素晴らしい記事があります。martinfowler.com