SORU
18 Temmuz 2011, PAZARTESİ


Alternatif enjeksiyon piç var mı? (AKA zavallı adam'varsayılan kurucu ile enjeksiyon s)

Ben en sık "" bazı durumlarda. piç enjeksiyon kullanmak için cazip am Bir zaman "doğru" bağımlılık yapıcı enjeksiyon:

public class ThingMaker {
    ...
    public ThingMaker(IThingSource source){
        _source = source;
    }

Ama sonra, sınıflar için niyetindeyimkamu API"piç" en büyük olasılıkla gerekli bağımlılık yapıcı: . varsayılan yazmaktansa (diğer geliştirme ekipleri tüketir sınıflar), daha iyi bir seçenek bulamıyorum

    public ThingMaker() : this(new DefaultThingSource()) {} 
    ...
}

Bariz dezavantajı işte bu DefaultThingSource statik bir bağımlılık yaratır ki, ideal olarak, böyle bir bağımlılık olacağını ve tüketici her zaman istediklerini enjekte ederdi. Ancak, bu kullanmak için çok zor; tüketicilerin bir ThingMaker yeni ve yapım İşleri için, sonra ay sonra almak istiyorum ihtiyaç duyulduğunda başka bir şey enjekte. Bu benim görüşüm: sadece birkaç seçenek bırakır

  1. Piç kurucu ihmal; ThingMaker tüketici İThingSource anlamak, ThingMaker İThingSource nasıl etkileşime girdiğini anlamak, bulmak veya somut bir sınıf yazmak ve yapıcı kendi çağrı örneğine enjekte etmek güç.
  2. İhmal piç yapıcı ve sağlamak ayrı bir fabrika, konteyner veya diğer önyükleme sınıf/yöntem; bir şekilde yapmak, tüketici olduğunu gerek yok yazma kendi İThingSource; gücü tüketicinin ThingMaker bulmak ve anlamak fabrika veya önyükleyici ve kullanın.
  3. Piç yapıcı," nesneyi ve onu, ve DefaultThingSource isteğe bağlı statik bağımlılığı ile başa çıkma. "yeni tüketici sağlayarak devam

Çocuk, #3 emin çekici görünüyor. Başka, daha iyi bir seçenek var mı? #1 veya #2 sadece buna değer görünmüyor.

CEVAP
18 Temmuz 2011, PAZARTESİ


Anladığım kadarıyla, bu soru biraz uygun varsayılanları ile gevşek bir API ortaya çıkarmak için nasıl ilgilidir. Bu durumda, bir iyi olabilirYerel Varsayılanbağımlılık isteğe bağlı olarak kabul edilebilir. Bir şekilde başa çıkmak içinisteğe bağlı bağımlılıklarkullanmakEmlak EnjeksiyonyerineYapıcı Enjeksiyon- aslında, bu Özelliği Enjeksiyon için poster senaryosu gibi.

Ancak, Piç Enjeksiyon asıl tehlike varsayılan bir durumdurYabancı Varsayılanvarsayılan yapıcı katarak çünkü bu , istenmeyen bir derleme için varsayılan. uygulama kaplin Bu soru anladığım kadarıyla, ancak, amaçlanan varsayılan bu durumda herhangi belirli bir tehlike görmüyorum aynı Kurul, menşeli.

Ayrıca daha önceki cevaplarım biri olarak açıklanan bir Cephe düşünebilirsiniz herhangi bir durumda: Dependency Inject (DI) "friendly" library

BTW, burada kullanılan terminoloji my book desen diline dayanır.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • kimaliz

    kimaliz

    18 Temmuz 2006
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • MysteryGuitarMan

    MysteryGuita

    16 HAZİRAN 2006