6

Genel olarak, uygulamanızın etrafına bir IoC konteyneri geçirmenin ve bunu bir servis konumlandırıcı gibi kullanmak kötü bir uygulamadır.Castle Windsor'da konteyneri geçmeden kapsamlı bir yaşam tarzı kullanmak mümkün mü?

Kapsayıcıyı yalnızca benim uygulamamın birleşik kökünde kullanmayı tercih ediyorum ve tek bir çağrımı Resolve() - uygulamasındaki en üst düzey nesneyi çözme ve bağımlıları alt sınıflara bağımlılıkları enjekte etmek için kapsayıcıda yanıtlama tercih ediyorum nesne grafiği.

Kale Windsor yakın zamanda bir "using" bloğu içinde container.BeginScope() öğesini çağırabileceğiniz kapsamlı bir yaşam tarzı ekledi. Bu "kullanma" bloğundan, kapsamlı bir yaşam tarzıyla kaydedilmiş bir bileşenin çözümlenmesi, "kullanım" bloğu boyunca her defasında aynı örneği döndürecektir.

container.Register(Component.For<A>().LifestyleScoped()); 

using (container.BeginScope()) 
{ 
    var a1 = container.Resolve<A>(); 
    var a2 = container.Resolve<A>(); 
    Assert.AreSame(a1, a2); 
} 

Soru: BeginScope() kabın üzerine bir uzantısı yöntemi olduğunu göz önüne alındığında, bir kapsamlı yaşam tarzı Gerçekten' hangi (konteyner etrafında geçirilen sürece bir uygulamada nasıl kullanılabileceğini görmek için başarısız yapmak istiyorum). Kapsamlı yaşam tarzının nerede ve nasıl kullanılabileceği konusunda herhangi bir örneği var mı?

sayesinde

Tom

+3

Kapsamlı yaşam tarzını nasıl ve neden kullanmayı planlıyorsunuz? –

+0

Merhaba Krzystof, Kapsamlı yaşam tarzını henüz kullanma planım yok. İleride kullanmak istediğimde kapsamlı yaşam tarzının nasıl doğru kullanılabileceğine dair birkaç örnek görmek istedim. Fabrikalarda kullanmak mantıklı bir yaklaşım gibi görünüyor. –

+1

Bu, ihtiyacım olana benzer gibi görünüyor, aynı kapsamda olan nesnelerin yapıcıları bağımlılıkları olarak kapsamları çözemedim: http://stackoverflow.com/questions/25064516/dependency-injection-lifestyle- –

cevap

7

Ben kullanımı genellikle genel kabı görmek için olsun bir fabrika, içinde olacağını düşünüyorum. Bir web uygulamasını düşünün: bir anlamda, bir MVC uygulamasında bir denetleyicinin veya bir "sayfanın" her bir çağrılması, yarı bağımsız bir program çalıştırıyor. Bu "program" ın kendi bağımlılıklarını çözmesi mantıksız değil. Yani, her denetleyici çağırma kabı kullanarak bağımlılıklarını çözmelidir. Belirli bir web isteği veya TCP isteği veya kullanıcı oturumu kapsamında, kabın nesneleri farklı şekilde çözmesini isteyebilirsiniz. Bu, kendi fabrikalarınızdan birinin içinde temiz bir şekilde yapmanın bir yoludur. IoC'nin tüm kullanımlarında olduğu gibi, iş mantığının kayıt kodunuza gizlenmesini sağlayacak şekilde kötüye kullanmamaya dikkat etmelisiniz.

+1

Anlaşmalı hizmet-paylaşımlı örnek-2-örnekleri arasında. Daha fazla düşünme ve okuma yaptıktan sonra, genel fikir birliği, konteynerin giriş noktası montajı içinde "kompozit kök" (montajcılar/önyükleyiciler ve fabrikalar aracılığıyla) olarak kullanılabileceği, fakat diğer montajlar içerisine "sızıntı" yapmaması gerektiği şeklindedir. Uygulama alanı. –

İlgili konular