2009-11-09 10 views
12

NInject'in modül mimarisi işe yarayacak gibi görünüyor ancak biraz karışıklık yaşayacağından endişeleniyorum.NInject modüllerinizi nasıl düzenlersiniz?

Modüllerinizi nasıl düzenlersiniz? Hangi mecliste kalıyorsunuz ve hangi kabloların hangi modülde olduğuna nasıl karar veriyorsunuz?

+0

İyi soru. Endişelerinizi paylaştığım için daha fazla tartışmayı görmek isterim. Her bir alt sistem için bir modülün makul olduğu düşünülürse, aynı zamanda Ünite Testi için farklı bağlantı kabloları için modüller de mevcut. – JulianM

cevap

7

Her bir alt sistem bir modül alır. Tabii ki 'alt sistem' olarak kategorileştirmeyi neyin belirlediğinin tanımı ...

Bazı durumlarda, daha düşük seviyeli bir alt sistem/bileşen bir konumda olmadığı için bazı bağlamalar için sorumluluk daha yüksek bir seviyeye kadar itilir. Son bir yetkili karar vermek - bazı durumlarda bu, parametreleri Modüle geçirerek elde edilebilir.

2

NInject kullanarak birkaç yıl sonra kendi postama yanıt veriyor. İşte

Ben örnek olarak bir Kitapçı kullanarak, benim NInjectModules düzenlemek nasıl:

  • BookStoreSolution
    • Domain.csproj
    • Services.csproj
      • CustomerServicesInjectionModule.cs
      • PaymentProcessingInjectionModule.cs
    • DataAccess.csproj
      • CustomerDatabaseInjectionModule.cs
      • BookDatabaseInjectionModule.cs
    • CustomSecurityFramework.csproj
      • CustomSecurityFrameworkInjectionModule.cs
    • PublicWebsite.csproj
        012.
      • PublicWebsiteInjectionModule.cs
    • Intranet.csproj
      • IntranetInjectionModule.cs

Bu ne söylediğini sistemde her proje bir veya daha fazla paketlenmiş olarak geldiği olmasıdır Bu projenin sınıfları için bağlamaları nasıl ayarlayacağını bilen NInject modülleri.

Çoğu zaman, bir uygulama, bir proje tarafından sağlanan varsayılan enjeksiyon modüllerinde önemli değişiklikler yapmak istemeyecektir. Örneğin, DataAccess projesini içe aktarması gereken küçük bir WinForm uygulaması oluşturuyorsam, normalde ilgili tüm Deposu <> arabirimlerine bağlı tüm projenin Deposu <> sınıflarına sahip olmak isteyeceğim. Aynı zamanda, özel bir uygulama için belirli bir enjeksiyon modülünü kullanmaya zorlayan hiçbir şey yoktur.Bir uygulama kendi enjeksiyon modülünü oluşturabilir ve içe aktardığı bir proje tarafından sağlanan varsayılan modülleri göz ardı edebilir. Bu şekilde sistem hala esnek ve ayrışmış durumda.

+0

Yani ... Bu, bir modülü olan projelerin her birine bir Ninject paketi/referansı eklemeniz gerektiği anlamına geliyor? İhtiyacım olan her hizmeti kaydettiğim arayan grubumda (ör. Web projesi) tek bir yere sahip olmayı tercih ederim ve daha sonra yalnızca bu montaj Ninject'e doğrudan başvurur. Düşünceler? –

+0

Evet, bu kurulumda bir dezavantaj budur. Ancak, hiçbir zaman mülkiyet enjeksiyonu kullanmayan veya Kernel.Get <>() yöntemini kullanan çok saf bir uygulamanız olmadıkça, genellikle bir NInject referansıyla sonuçlanırım. – cbp

+0

iyi ... DI için Unity kullanılan bir projeyi bitirdim ve web projesinde bootparpper'ımda uzun bir RegisterServices yöntemi ile bitti. Sınıf kütüphanelerimden birinin doğrudan Birlik veya EntLib'e doğrudan bağımlılığı yoktu. Hepsi kurucu enjeksiyonu yaptılar. Oldukça güzel olduğunu düşündüm. –