2012-10-25 21 views
7

Benzer soruların daha önce sorulduğunu, ancak DI ve .Net için tamamen yeni olduğunu görebiliyorum, tüm çözümü kavrayamıyorum veya doğru kaynağı bulamadım.Montajlar arasında Ninject nasıl kullanılır

  • WebAPI, BL, DL derlemelerim var.
  • WebAPI
  • WebAPI DL referans ETMEZ ve bunu aynı tutmak istiyorum,
  • BL DL bağlıdır, BL bağlıdır. Birkaç tane daha meclis var ama bu konuları göstermek için yeterli.

WebAPI uygulama başlangıç ​​bölümüne sahiptir, bu yüzden bunu Ninject Kernel'i başlatmak ve WebAPI projesi için bağımlılıkları kaydetmek için kullanabilirim.

BL ve diğer montajlar için aynı şeyi nasıl yapabilirim?

cevap

3

farklı şekillerde bir çift vardır, Ninject Conventions automagicallylar aynı ada sahip bir uygulamaya her ISomething gidermek için kullanabileceğiniz (örn IThing ->Thing) veya bağımlılıkları kaydolmuş her mecliste bir Ninject Module oluşturabilir (BL içindeki modül, modülü DL'nize yükleyebilir).

Yaptığınız yaklaşım, farklı nesneler için farklı kapsamlar tanımlamanız gerekip gerekmediğine bağlı olacaktır; örneğin, bazı şeyleri, hangi yöntemi kullandığınızı etkileyebilecek tekil olarak çözümlemiş olsaydınız.

+0

Teşekkürler Trevor, konsepti anlıyorum ama BL Assembly'deki mantığı nasıl ve nerede uygulayacağınızı bilmiyorum. – user1767363

+0

Her bir modülün Ninject için çekirdeği nasıl kurduğuna dair bir örnek verebilir misiniz? Ben de bu problemi nasıl çözeceğimi öğrenmeye çalışıyorum. – Wavel

+0

@Wavel - Yanıtın bağlantılarını ekledim. –

0

Sanırım Mark Seemann's advice about this mükemmeldir - uygulamanızın mümkün olan en yüksek katmanında bir kompozisyon kökü oluşturun. Web uygulamaları için, bu Globals.asax dosyasında demektir. Bunun için iyi reasonu açıklayabilirim, ancak bağlantılı blog yazısı daha iyi bir iş çıkarır.

Bu, elde etmeye çalıştığınız katmanları kırıyor, ancak sadece zorlukla ve bence uygun bir yol. Eğer web tabakanız uygun şekilde inceltilmişse (yani, kalın bir istemciyle oldukça kolay bir şekilde değiştirebilirsiniz), o zaman büyük bir kayıp değildir. Buna gerçekten olumsuz iseniz, DL için BL'de bir kompozisyon kökü oluşturabilirsiniz.