Soalan:
Anda biasa dengan corak kaedah kilang, tetapi menghadapi cabaran dalam menguruskan sejumlah besar kebergantungan dalam pembina kilang. Anda cuba menyuntik kelas kereta konkrit ke dalam kilang, tetapi ini melanggar prinsip kilang. Anda juga tidak mahu menggunakan pencari perkhidmatan kerana ia terkenal sebagai anti-corak.
Penyelesaian:
Kaedah yang paling sesuai untuk senario ini ialah Mod Strategi. Corak ini membolehkan bekas DI anda menyuntik kebergantungan ke dalam keadaan kilang milik mereka, menghapuskan keperluan untuk menggunakan pencari perkhidmatan atau mengacaukan kelas lain dengan kebergantungan.
Antara Muka:
<code>public interface ICarFactory { ICar CreateCar(); bool AppliesTo(Type type); } public interface ICarStrategy { ICar CreateCar(Type type); }</code>
Kilang:
<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>
Strategi:
<code>public class CarStrategy : ICarStrategy { private readonly ICarFactory[] carFactories; public CarStrategy(ICarFactory[] carFactories) { // ... 构造函数和实现 } }</code>
Penggunaan:
<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>
Kelebihan:
Atas ialah kandungan terperinci Bagaimanakah Suntikan Ketergantungan Boleh Menyelesaikan Cabaran Kaedah Kilang dengan Banyak Ketergantungan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!