MVVMcross, nesne yapımı sırasında, özellikle `mvx.iocprovider` singleton örneği tarafından yönetilen kontrol (IOC) konteyneri ile yansıma yoğun bir şekilde kullanır. İşte MVVMCross'un nesne yapımı sırasında yansımayı nasıl ele aldığına dair ayrıntılı bir bakış:
Yapıcı enjeksiyonu
MVVMCross, yansıma kullanarak nesne yapımı sırasında parametreleri otomatik olarak çözmesini sağlayan yapıcı enjeksiyonu destekler. Bir nesne oluştururken, MVVMCross aşağıdaki adımları gerçekleştirir:
1. Yansıma Yapıcıyı bulmak için: MVVMCross, somutlaştırılan sınıfın yapıcısını tanımlamak için yansıma kullanır.
2. Parametre Çözünürlüğü: Yapıcı tarafından gereken parametreleri inceler ve gereken arayüzleri veya türleri tanımlar.
3. Kayıtlı uygulamaları çözün: Her parametre için MVVMCross, arayüz veya tür için kayıtlı uygulamayı elde etmek için `mvx.iocprovider.resolve ()` kullanır.
4. İnvoke Yapıcı: Tüm parametreler çözüldükten sonra MVVMCross, yapıcıyı çözülmüş parametrelerle çağırmak için yansıma kullanır.
Bu işlem özyinelemedir, yani çözülen nesnelerden herhangi biri başka nesneler gerektirirse, MVVMCross bunları da çözecektir [1] [4].
Sözleşmeye Göre Toplu Kayıt
MVVMCross ayrıca yansıma kullanarak sınıfların toplu olarak kaydedilmesini destekler. Bu genellikle `` mvxapplication '' dan miras alan `` uygulama 'sınıfında yapılır. Çerçeve, çekirdek montajda "hizmet" ile biten tüm sınıfları bulmak için yansıma kullanıyor ve bunları tembel singletonlar olarak kaydediyor. Bu aşağıdaki adımlarla elde edilir:
1. "Hizmet" ile biten sınıfları bulun: Yansıma, çekirdek montaj içinde "hizmet" ile biten isimleri olan tüm sınıfları bulmak için kullanılır.
2. Arabirimleri tanımlayın: Bulunan her sınıf için MVVMCross, uyguladığı arayüzleri tanımlar.
3. Tembel Singletons olarak kaydolun: Bu sınıflar daha sonra ilgili arayüzlerine karşı tembel singleton olarak kaydedilir. Bu, ilk talep edilene kadar somutlaştırılmadıkları anlamına gelir [2] [4] [7].
ViewModels ve Bağımlılık Enjeksiyonu
MVVMCross, ViewModels için aynı yapıcı enjeksiyon mekanizmasını kullanır. Bir ViewModel oluştururken MVVMCross, IOC kapsayıcısını kullanarak yapıcıda belirtilen bağımlılıkları çözer. Bu, hizmetlerin farklı platformlarda kolay özelleştirilmesine izin verir ve sahte uygulamaların kullanılmasını sağlayarak birim testini kolaylaştırır [1] [4].
Özelleştirme ve Appstart
`` App` sınıfı, IOC kapsayıcısına özel nesneleri kaydetmek ve uygulamanın ViewModels'i başlatmaktan sorumludur. Gerekirse, ilk önce hangi ViewModel'in sunulacağına karar vermek için özel bir `` appstart 'sınıfı kullanarak başlatma işlemini özelleştirebilirsiniz [2] [7].
Özetle, MVVMCross, nesne yapımı sırasında bağımlılıkları çözme işlemini otomatikleştirmek için yansımadan yararlanır, bu da karmaşık nesne grafiklerini yönetmeyi ve platformlar arası geliştirmeyi minimum platforma özgü kodla desteklemeyi kolaylaştırır.
Alıntılar:[1] https://www.mvvmcross.com/documentation/fundamentals/dependency-injection
[2] https://yanxiaodi.gitbook.io/xamarin-mvmcross-handbook/using-mvvmcross-to-create-mour-project/adding-an-app-class
[3] http://wojosoftware.com/software/mvmcross/
[4] https://www.mvvmcross.com/documentation/fundamentals/inversion-of-control-ioc
[5] https://www.codeproject.com/articles/863695/introduction-ton-mvvmcross-platform
[6] https://github.com/media-tools/sqlite-net-etsensions
[7] https://www.mvvmcross.com/documentation/getting-started/mvvmcross-overview
[8] https://www.mvvmcross.com/documentation/fundament/viewmodel-lifecycle
[9] https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/august/windows-phone-build-mvvm-apps-with-xamarin-and-mvvmcross
[10] https://www.mvvmcross.com/documentation/adved/customizing-using-app-and-setup