SORU
3 Mart 2009, Salı


Birisi Microsoft Birlik açıklayabilir mi?

Birlik hakkında bildirimler, Bağımlılık Enjeksiyon, Kontrol İnversion) hakkında makaleler okuyorum, ama basitçe (veya basit örnekler) açıkladı ihtiyacım var. MVPC desen aşinayım (burada), ama gerçekten bu Birlik olayı henüz idrak edemez, ve uygulama tasarımı bir sonraki adım olduğunu düşünüyorum.

CEVAP
3 Mart 2009, Salı


Birlik sadece bir IoC "kap". StructureMap Google ve yerine deneyin. Biraz IoC sana yeni grok için daha kolay sanırım.

Eğer IoC anlamak temelde, o zaman ne yaptığını bir nesne oluşturulmuş geldiğinde kontrol eviren olduğunu anlıyorsunuz.

Olmadan Ioc:

public class MyClass
{
   IMyService _myService; 

   public MyClass()
   {
      _myService = new SomeConcreteService();    
   }
}

İle IoC konteyner:

public class MyClass
{
   IMyService _myService; 

   public MyClass(IMyService myService)
   {
      _myService = myService;    
   }
}

IoC olmadan, İMyService dayanan sınıf yeni kullanmayı hizmeti somut bir sürümü de vardır. Ve bu kötü için çok sayıda sebep (ettik birleştiğinde sınıf için belirli bir beton sürümü İMyService, yapamazsın birim test kolay değiştiremezsiniz kolayca, vb.)

IoC konteyner "için bu bağımlılıkları gidermek için konteyner. yapılandırma ile Çok yapıcı tabanlı enjeksiyon düzeni, kurucu İMyService bağımlılık arayüzünü geçirir. Eğer konteyner ile Sınıfım oluştururken, kap sizin için İMyService bağımlılık çözer.

StructureMap kullanarak, kapsayıcı yapılandırma bu gibi görünüyor:

StructureMapConfiguration.ForRequestedType<MyClass>().TheDefaultIsConcreteType<MyClass>();
StructureMapConfiguration.ForRequestedType<IMyService>().TheDefaultIsConcreteType<SomeConcreteService>();

Ne yaptın konteyner söyledi, "Zaman istekleri İMyService biri, onları SomeConcreteService bir kopyasını verin." Ve birisi bir Sınıfım sorduğunda, somut bir Sınıfım olsun da belirtildi.

IoC konteynerine gerçekten yapar. Bunu sağlamak için daha fazla, ama bu itme - onlar bağımlılıkları çözmek için, böylece gerek yok (gerek yok kullanmak için "yeni" sözcüğünü boyunca kod).

Son adım: Sınıfım oluştururken, bu.

var myClass = ObjectFactory.GetInstance<MyClass>();

Bu yardımcı olur umarım. Hissetmek için ücretsiz e-posta bana.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeremy Stark

    Jeremy Stark

    23 Mayıs 2010
  • Madeon

    Madeon

    31 Ocak 2010
  • monkophile

    monkophile

    25 Temmuz 2007