7

Şu anda bir hizmet ağ geçidi işlevi gören bir nuget paketi yazıyoruz. Sorumluluğu, çağrıyı harici bir servise sarmaktır, böylece doğru şekilde yapılmakta ve cevap doğru bir şekilde ele alınmaktadır. Amacı, yeni bir müşteri dış hizmeti kullanmak istediğinde dev zaman yükünü azaltmaktır.Bağımlılık Enjeksiyonu İle Bir Nuget Paketi Tasarlama

Nuget paketi, dış hizmetin çözümünde 'istemci' adı verilen tek bir projeden oluşturulur. Bu, istemci projesinin ortak bir etki alanını paylaşabilmesi ve aynı zamanda yayınlandığı zaman için senkronize sayılar oluşturmasıdır. Müşteri projesi, kontrol ilkesinin tersine çevrilmesini, yani giriş noktası olarak hareket eden sınıfın (dış hizmetten yanıt almak için yığının başlangıcı) bir dizi arayüz bağımlılığına sahip olduğu anlamına gelir.

Genellikle StrucutreMap ürününü IoC kabımız olarak kullanıyoruz, ancak istemci projemizi bağımlılık enjeksiyonu 'yerleşik' olarak nasıl yapılandıracağımızı merak ediyorum. Her tüketicinin paket için bağımlılık çözümünü kurmak zorunda olması yanlış görünüyor. Bununla birlikte, her müşterinin StructureMap'i kullanması ve 'ClientRegistry' (başlatıcı) sınıfını kendi başlangıç ​​mantığına eklemesi gerektiği de söz konusu olmamalıdır.

Bu sorunu çözmeye yardımcı olacak yol gösterici ilkeler var mı? Ya da IoC prensibine dayanan karmaşık nuget paketlerinin iyi örnekleri?

cevap

2

CommonServiceLocator numaralı telefonu kullanabilirsiniz; tam bir IoC kabı kadar zengin değildir, ancak paket kabınızı agnostik hale getirecek ve paketinizin tüketicilerinin seçtikleri IoC kabını kullanmaya devam etmelerine izin vermelidir.

kütüphane IoC kapları ve hizmet bulma üzerinde bir soyutlama sağlar. Kütüphaneyi kullanmak, bir uygulamaya, zor referanslara dayanmadan, kapasitelere dolaylı olarak erişme izni verir. Umut, bu kütüphaneyi kullanmanın, üçüncü taraf uygulamalarının ve çerçevelerinin, belirli bir uygulamaya indirilmeden IoC/Servis Konumundan yararlanmaya başlayabilmesidir. CSL sadece Çöz işlevsellik sağlar, ancak StructureMap ile entegre ikinci `MyNyGetPackage.Integration.StructureMap` ekleyebilmeniz

+1

Not. – Steven

+0

CSL etrafında bir şeyler okudum ve onun faydasını görebiliyorum ama yine de nasıl yaklaşacağım konusunda kafam karıştı. IServiceLocator uygulamasının, tüketen uygulamanın kendi IoC kurulumuna 'ekleyebileceği' bir uygulamayı ortaya çıkarmaya mı çalışmalıyım? Ya da sadece tüketici içinde mevcut olan CSL referansına güveniyorum ve 'ServiceLocator.SetLocatorProvider'ı, bir çeşit başlatma işleminde yalnızca istemciye dahil olan bir kapsayıcıyla mı çağırıyorum? Bu yaklaşımla tüketicilerin mevcut konteynerinin üzerine yazılma riski yok mu? – Nick

+1

@Nick ah Sanırım nereden geldiğini görüyorum. Bu durumda, autofac'i dahili olarak kullanan bazı projeler gördüm (yani, dahili olarak kurulan ve otofac, düzene yerleştirildi) ve bu da bir fabrika nesnesini dış dünyaya ifşa etti. Fabrika daha sonra pakete ve içeriğine ana giriş noktası olur. – MattDavey

İlgili konular