2009-05-06 14 views

cevap

22

kısa cevabı evet. Eğer Resolve yöntemleri kullandığınızda

Bu

otomatik geçirilmelidir. Örneğin

:

IUnityContainer container = new UnityContainer(); 
var something = container.Resolve<Something>(); 

Ayrıca, bu o içine bakmak isterseniz Prism (CodePlex) kullanan aynı tekniğidir.

Güncelleme Eklendi Testi:

[TestClass] 
public class Spike 
{ 
    [TestMethod] 
    public void unityTest() 
    { 
     var container = new UnityContainer(); 
     var something= container.Resolve<Something>(); 
     Assert.AreSame(container, something.Container); 
     // This passes. Success. 
    } 
} 

public class Something 
{ 
    public Something(IUnityContainer container) 
    { 
     Container = container; 
    } 

    public IUnityContainer Container { get; set; } 
} 
+4

Konteyneri kendi kendine kaydetmeye gerek yoktur. IUnityContainer bağımlılığını varsayılan olarak kendisine çözer. –

+0

Dün gece başa çıkmaya vaktim olmadığına göre teşekkürler. Kullandığım testi ekledim. – bendewey

0

bendewey bunu bir nesne başka bir nesne gibi, olduğu gibi, pas ver, ama belirtildiği gibi, neden geçmek?

Yalnızca bir tane var, neden herhangi bir sınıfa erişilebilecek statik özellik olmadı?

+2

Bu yaklaşımla ilgili kaygım, statik sınıf içeren projeye gereksiz bağımlılıklara neden olabileceğidir. Deneyimlerimde konteynırı enjekte etmek de test edilmesine yardımcı oluyor. – bendewey

+0

Aynı nedenden dolayı statik erişimciler diğer bağımlılıklar için kullanılmaz: test edilebilirliği zorlaştırır. –

+0

Konteynırı almak için ünite test çerçevesindeki mantıktan ziyade, IMO'nun konteynırı ele almak için ayrı bir sınıfa sahip olması daha iyi olurdu, böylece bu sınıfı test edebilirsiniz. Artık düzgün çalıştığını biliyorsunuz, bu nedenle birim testiniz denenmemiş bir şey kullanmıyor. Bir birim testinde çok az yardımcı fonksiyona sahip olmaya çalışıyorum, çünkü bunlar da test edilmelidir. –

1

ilk cevap ne düşünüyordum tür. Teşekkür ederim.

Unity önce biz kendi IOC konteyner inşa ve bir sözdizimi şey gibi ...

<constructor> 
    <param name="factory" value="[{factory}]"/> 
</constructor> 

[{fabrika}] o parametre olarak kendisini geçmesine neden olur var. statik olarak ayarlamadan gelince

: Her nesne tek özelliği (tabii ki) bağımlı hale çünkü bu yaklaşımı kullanarak sevmiyorum. Daha az yeniden kullanılabilir ve daha az test edilebilir, özellikle de statik (eğer olması gerektiği) salt okunur ise. Statik ayarlandığında, oluşturabileceğiniz test senaryolarını sınırlandıramazsınız (bununla karışamazsınız).

başka bir şey, o zaman nesneleri en az bir parametre olarak bir kap kabul etmek gerekir. Orada değilse, o zaman statik bir geri düşebilir.

Tek örneği kullanma yolunu aştık ve her şeyi değiştirdik. Benim düşünceme göre, nesneler bundan daha esnek olmalıdır. Nesnelerin tüketicisi, nesnelerine geçtiği tek bir örneğe sahip olmak isterse, bu tüketiciye bağlıdır. Ancak, nesnenin kendisi buna gerek duymamalıdır. Yukarıda gösterilen sözdizimi ile, kabı grafikten geçirmesi gerçekten çok kolay. bilgi için

teşekkürler.

Jay

Üzgünüz ... yeni adam. Şimdi görüyorum, bu bir yorum olmalı, cevap değil.

+0

Bu, orijinal sorunuz için bir güncelleme olarak da ifade edilebilir. Ayrıca akılda tutularak, oylama bağlamdan "ilk cevap" yorumunu alabilir. – bendewey

İlgili konular