Her zaman kesişmesi gereken birkaç yöntem içeren soyut bir temel sınıfım var. Temel sınıf, kullanıcı tanımlı sınıflar tarafından miras alınabilir ve uygulama başlangıcında kapsayıcıya kaydedilebilir. Kullanıcının bir kaydı olmadıysa, konteyner yükleyicisi bir kişinin kendisini kaydedecektir.Castle Windsor, bileşen zaten kaydedildikten sonra seçici ile ara uygulayıcılar uygular
İşte sorun - kullanıcı interceptoru ekleme konusunda endişelenmemeli. Konteyner, bileşeni kimin ve nerede kayıtlı olduğuna bakmaksızın, kendi başına eklemelidir.
Şu ana yapıyorum budur:
if(!container.Kernel.HasComponent(typeof(MyBaseComponent)))
container.Register(Component.For<MyComponent>()
.Interceptors(InterceptorReference
.ForType<MyComponentMethodInterceptor>())
.SelectedWith(new MyComponentMethodSelector()).AtIndex(1));
MyComponentMethodSelector
yontemadi ben (bu durumda bir MyComponentMethodInterceptor
buna ekleniyor) yolunu kesmek gerekir birini eşit olup olmadığını denetler basit IInterceptorSelector olduğunu.
Gördüğünüz gibi, öğenin önceden kaydedilmiş olup olmadığını kontrol eder.
Sorun şu ki - zaten kayıtlı ise bir engelleyici ekleyebilir miyim? Akla gelen en belirgin seçim bir IContributeComponentModelConstruction
kullanıyor, ancak o noktada engelleyicinin ekleneceği yöntemi seçemiyorum. Yoksa orada mı?
DÜZENLEME:
Ben biraz daha belirgin olması gerekirdi. Sadece belirli bir yöntem için bir engelleyici eklemem gerekiyor. Bu yüzden bir MyComponentMethodSelector kullanıyorum. IContributeComponentModel'in farkındayım ve bunun için bir yöntem seçicisi eklemenin bir yolu olmadığını anlayana kadar bununla başladım.
neros: Bir tesis
Sonra bileşenin önce konteynere için kayıt tesis ekleyebilir ya da bileşeni kaydederken sizin tesis olay özleyeceğim oluşturarak başlayacaktı İstediğin şeyi nasıl halledebileceğini bulmak için herhangi bir şansın var mıydı, bunu duymak isterdim – samy
Ne yazık ki yok. Farklı bir projeye yeniden atandım, bu yüzden şu anda beklemede. Yine de bir noktaya geri döneceğim. – NeroS