Aynı arabirimin 2 uygulamasına sahibim ve kullanıcı oturum açmışsa veya kullanıcı oturum açmamışsa, uygulama1'i kullanmak istiyorum1 Kullanıcı bunu kale windsor ile nasıl yapılandırabilirim?Castle windor Koşullu bağımlılık ekleme
cevap
Bunu çözmenin bir yolu, hizmeti anahtarla kaydettirin ve sonra gerektiği gibi çözün.
public interface ISample
{
int Calculate(int a, int b);
}
class SampleB : ISample
{
public int Calculate(int a, int b)
{
return a + b + 10;
}
}
class SampleA : ISample
{
public int Calculate(int a, int b)
{
return a + b;
}
}
kayıt: SampleA gerektiğinde
container.Register(Component.For<ISample>().ImplementedBy<SampleA>().Named("SampleA").LifeStyle.Transient);
container.Register(Component.For<ISample>().ImplementedBy<SampleB>().Named("SampleB").LifeStyle.Transient);
// çözün. SampleB gerektiğinde özünür.
var sampleB = container.Resolve<ISample>("SampleB");
Kullanılabilir uygulamalar örneğin bağlı arasında seçim yapmak mümkün olacaktır bir handler selector, ekleyebilir Thread.CurrentPrincipal
'un ayarlanıp ayarlanmadığı (veya doğru hatırlıyorsa ASP.NET/MVC'de HttpContext.Current.Request.IsAuthenticated
). işleyici seçici muhtemelen bu benzeyecektir
:
public class MyAuthHandlerSelector : IHandlerSelector
{
public bool HasOpinionAbout(string key, Type service)
{
return service == typeof(ITheServiceICareAbout);
}
public IHandler SelectHandler(string key, Type service, IHandler[] handlers)
{
return IsAuthenticated
? FindHandlerForAuthenticatedUser(handlers)
: FindGuestHandler(handlers);
}
bool IsAuthenticated
{
get { return Thread.CurrentPrincipal != null; }
}
// ....
}
işleyicisi seçiciler
Sadece olumsuz, onlar kaptan çekti değiliz ki - onlar kayıt esnasında kaba bir örneği olarak eklenir yani zaman, böylece bağımlılık enjekte, yaşam tarzı yönetilen, vb almak zorunda değilsiniz, ama bunu azaltmak için yollar var - bunun nasıl yapılacağını görmek istiyorsanız F.T.Windsor bir göz atın.
3.0 sürümü ile bir şey değişmiş olup olmadığını merak ediyorum - eğer hala harici bir tesis gerekiyorsa demek istiyorum. – Giedrius
- 1. Ruby Gemspec'deki Koşullu Bağımlılık
- 2. Bağımlılık Enjeksiyon Birimi - Koşullu Çözümleme
- 3. koşullu ekleme ifadesi
- 4. Koşullu olarak linux komut dosyasındaki bir dosyaya ekleme veya ekleme
- 5. mysql koşullu ekleme yinelenen güncelleştirme - çoklu kayıtlar
- 6. mysql koşullu ekleme - yoksa varsa ekleyin
- 7. d3 koşullu olarak veri özniteliği ekleme
- 8. Castle Windsor'u kullanarak CustomAttribute'e bağımlılığı enjekte etme
- 9. Castle Dynamic Proxy Generation
- 10. Koşullu koşullu hata
- 11. Koşullu olarak Entity Framework ile ekleme yaparken Kimlik alanı
- 12. grails veritabanı geçişi eklentisi - koşullu olarak satırları ekleme
- 13. Castle Windsor kurucu parametreleri iletiliyor
- 14. Castle Windsor Resolve çalışma saatinde
- 15. Bouncy Castle API belgeleri nerede?
- 16. Simetrik Anahtar ve Bouncy Castle
- 17. Bağımlılık Ağacı'nda gösterilmeyen bağımlılık ancak WAR
- 18. Cocoapods bağımlılık
- 19. Bağımlılık Enjeksiyon
- 20. bağımlılık enjeksiyonu
- 21. Fonksiyonel Bağımlılık
- 22. Google test çerçevesi - Test durumları arasındaki bağımlılık
- 23. SQL: Koşullu Seçim İçinde Koşullu Seçim
- 24. Windsor Castle arayüz türleri dizisi enjekte edemez
- 25. Castle Windsor veya Spring.NET - avantajlar ve dezavantajlar
- 26. Castle Windsor: Resolve() tarafından atılan istisnaları bastırır()
- 27. Castle Windsor yapılandırma dosyasında şifreler mi saklanıyor?
- 28. Castle-Windsor XML yapılandırması yoluyla ForwardedTypes'i destekliyor
- 29. Windsor Castle: belgeler için iyi kaynaklar, öğreticiler
- 30. Windsor Castle ile dizinden DLL alınıyor
Burada container.Resolve() 'yi çağırırdınız? –
İçerideki uygulamayı değiştirmedikçe/genişletmediğiniz sürece, windsor'un kullanıcının giriş yaptığını bilmesinin ya da bulunmasının bir yolu yoktur. Aralarında “log in factor” alacak ve istenen uygulamayı verecek bir Decider sınıfı olabilir. –
Windsor * bunun için mekanizmalara sahiptir (mookid'in cevabına bakınız), kendi iç uygulamasını hiç değiştirmemize gerek yoktur. –