Derleme zamanı IOC


11

Herkes derleme zamanında IOC yapmak için bir proje başlattı (muhtemelen Roslyn veya Linq MethodInfo emit kullanarak)?

IOC konteynırları ile ilgili deneyimim şimdiye kadar harika oldu, birkaç küçük sorunu aştı

  1. Çözünürlük mantığının çoğu burada oluştuğundan, birçok IOC kabının başlatılması yavaştır
  2. Derleme artık kurucunun çağrılmasını sağlayamadığından, çözünürlüğün mümkün olduğundan emin olmak genellikle zordur
  3. Çoğu zaman IOC kapları çalışma zamanına küçük bir ek yük ekler (bazıları küçük bile değildir, genellikle hızlı başlayanlar yavaş çalışır)

Bana göre ideal çözüm, IOC yerine bir Factory sınıfı ekleyen yapı zincirine derleme adımı eklemek olacaktır.

Bunu daha önce kimse yaptı mı? Değilse, neden olmasın?

Yanıtlar:


4

Bunu yapmak böyle bir sorun olmamalı. Sadece aynı IoC mantığını çalıştırın ve sınıfları somutlaştırmak yerine, somutlaştırmayı yapan bir kod yayarsınız.

Ancak bunu yaparak, IoC'nin büyük bir avantajını kaldırıyorsunuz: Tüm uygulamayı yeniden derlemek zorunda kalmadan, kopyalayıcıların nasıl oluşturulduğunu değiştirme yeteneği. Sadece yapılandırmayı değiştirerek uygulamanın farklı hizmetler veya veri kaynakları kullanmasını sağlayabilirsiniz. Ve bu kabiliyetten tam olarak faydalanacak uygulamayı henüz görmemiş olsam da, yine de IoC'nin başarısının önemli bir parçası.


Evet mümkün olduğunu biliyorum. Ama henüz bunu yapan bir IoC konteyneri görmedim. Ayrıca mevcut eğilim kod (akıcı API) kayıt doğru gibi görünüyor. Bu göz önüne alındığında, dediğim IoC kapsayıcısını yazmayı düşünüyorum.
ArTs

Hiro ( github.com/philiplaureano/Hiro ) 'in derleme zamanında yapabileceğini hatırlıyorum .
lzcd

2
"Ancak bunu yaparak, IoC'nin büyük bir avantajını kaldırıyorsunuz: Tüm uygulamayı yeniden derlemek zorunda kalmadan, kopyalayıcıların nasıl oluşturulduğunu değiştirme yeteneği." Bana öyle geliyor ki, bunu tüm uygulamaya uygulamak aşırıya kaçmış; uygulamanın her bölümünü bir eklentiye dönüştürüyorsunuz. Ek olarak, her iki teknik de bir arada bulunabilmelidir - bazı bileşenleri derleme zamanında ve bazıları çalışma zamanında kablolama yapmanıza gerek yoktur.
Doval

Bunun nasıl büyük bir avantaj olduğunu anlamıyorum. Hangi bağlamda bileşenleri çalışma zamanında tamamen değiştiriyorsunuz? Birkaç yapılandırma kullanım durumu belki?
andyczerwonka

4

Dagger for Java / Android bunu yapar. Çoğu çalışma zamanı hatasını derleme hatalarına dönüştürme de dahil olmak üzere neredeyse tamamen derleme zamanı kodgen deneyimi sunmak için bazı çalışma zamanı sihirinden (Guice gibi) fedakarlık yapar.

.NET de çok iyi olurdu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.