質問:
あなたはファクトリ メソッド パターンには精通していますが、ファクトリ コンストラクターで多数の依存関係を管理するという課題に直面しています。具体的な自動車クラスをファクトリに注入しようとしましたが、これはファクトリの原則に違反します。また、サービス ロケーターはアンチパターンであることが知られているため、使用したくないでしょう。
解決策:
このシナリオに最も適した方法は、戦略モードです。このパターンを使用すると、DI コンテナーがそれに属するファクトリ インスタンスに依存関係を注入できるため、サービス ロケーターを使用したり、他のクラスを依存関係で混乱させたりする必要がなくなります。
インターフェース:
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
工場:
<code>public class Car1Factory : ICarFactory { private readonly IDep1 dep1; private readonly IDep2 dep2; private readonly IDep3 dep3; // ... 构造函数和实现 } public class Car2Factory : ICarFactory { private readonly IDep4 dep4; private readonly IDep5 dep5; private readonly IDep6 dep6; // ... 构造函数和实现 }</code>
戦略:
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; public CarStrategy(ICarFactory[] carFactories) { // ... 构造函数和实现 } }</code>
使用法:
<code>var strategy = new CarStrategy(new ICarFactory[] { new Car1Factory(dep1, dep2, dep3), new Car2Factory(dep4, dep5, dep6) }); var car1 = strategy.CreateCar(typeof(Car1)); var car2 = strategy.CreateCar(typeof(Car2));</code>
利点:
以上が依存関係の注入は、多くの依存関係を持つファクトリ メソッドの課題をどのように解決できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。