2012-02-16 5 views
10

Şimdi DI konseptini bir süredir kullanıyorum ama şimdi bağımlılık enjeksiyon kabı (DIC) kullanmaya başladım. Bir şey benim için net olmamasına rağmen.Bağımlılık Enjeksiyon Kabı (PHP) örneği nasıl korunur

DIC'imde (örneğin) bir Config nesnesi ve Request nesnesi var. Bir istek kapsamındaki bu nesnelerin (aynı kapsayıcıyı bu kapsayıcıdan istediğinde her zaman kullanılır) aynı kaldığını anlıyorum. Ancak bu, yalnızca aynı DIC örneğini tekrar kullandığımda olur.

DIC'mi sınıflarımdan nasıl geçirmeliyim? Router sınıfımda kullanmak istediğimi söyle, Router sınıfımın kurucusuna iletmem gerekiyor mu? Ancak, Yönlendirici sınıfı başka bir sınıfta oluşturulur ve bu da zaten bu DIC nesnesine sahip olmalıdır.

Veya bu DIC'nin bir tekilini oluşturmalı mıyım?

cevap

7

Singleton yoluna gitmeyin. DIC'nin size sunduğu tüm avantajları etkili bir şekilde alır. Genellikle kabı yapıcıya veya geçerli olduğunda bir yöntem parametresi olarak geçirirsiniz.

Evet, bu, kapsayıcı nesneyi uygulamanızın etrafında geçirme konusunda fazladan çaba sarf etmenizi gerektirir, ancak sonuç olarak kodunuz, bu sınıfların bu nesneye bağımlı olduğunu iyi yansıtır.

+1

En iyi yol, DIC uygulamasını uygulamamın önyüklemesinde oluşturmak ve gerektiğinde iletmek mi? İyi bir yaklaşım gibi gözüküyor, ama aslında buna fazladan çaba sarfetmem gerekiyor. (Sınıflarım da çok test edilebilir) – jayv

+0

Oldukça iyi bir fikir olabilecek tüm uygulamada kullanılan bir kapsayıcı için. Aksi takdirde, global değişkenler veya Singletonlar olarak açığa çıkarılması gereken kaynakları/nesneleri etkili bir şekilde kapsüller. Sınırlı kullanım alanına sahip 'yerel' DI kaplarına sahip olabileceğinizi unutmayın. Bunlar, gerekli olduğu kapsamda inly oluşturulmalıdır. – Mchl

+0

Sınırlı kapsam kullanımının pratik bir örneğini bana verebilir misiniz? – jayv