2010-07-07 17 views
7
için bir kaynağım yok

PostSharp, kendi web sitesindeki örneklerde ana sistem düzeneklerinde çağrıları engelleme demosuna sahiptir. Bir kaç kez denedim ve söz konusu intercept çağrılarını mecliste çoğaltmak için denemedim.PostSharp on derlemeler

Benim yaklaşımım basitçe enstrümanı istediğim isim alanını ve yöntemi hedefleyen derleme düzeyi özelliğini yerleştirmekti. Bu benim için hiç çalışmadı.

gibi bir şey:

[montaj: ("My.BusinessLayer *" "MyCategory", AttributeTargetTypes =) Trace]

Burada bir şey eksik? Kaynağın bunun için çekilmemiş olması durumunda enstrümantasyon yönümün bir çalışma zamanı enjeksiyonu yapamaması mümkün mü? Çalışma zamanı enjeksiyonları yapabileceğimi düşündüm ...

Teşekkürler.

cevap

5

Sen belirterek diğer meclisleri yöntemlerini takip edebilirsiniz:

[assembly: Trace("MyCategory", 
       AttributeTargetAssemblies="xyz", 
       AttributeTargetTypes = "My.BusinessLayer.*")] 

Ancak dış montaj değiştirilmeyecek! Sadece mevcut projeden harici kuruma yapılan çağrılar değiştirilebilir.

Kaynağınız olmayan montajları değiştirmek artık kolay değil. Bu mümkündür, ancak gelişmiş bir senaryo olarak kabul edilir ve özel kodlama gerektirir.

+0

Gael, So ... Bir birim testi oluşturmuş olsaydım ve bir "yüksek maliyet" yöntemi olduğu için bir yöntem çağrısını engellemek istedim ... Yukarıdaki gibi konuştuğunuzda, aramayı ekleyebilirim, ama sadece birim Ben doğrudan çağrılırsa testin çağrıları kesişir, fakat meclisi değil aynı yöntemlere çağrıları test ediyordum? Bunu yapmak isteseydim, test ettiğim meclise müdahale etmem gerekirdi? - Söz konusu gelişmiş senaryodan örnekler var mı? Bunu görmek çok isterim. – pinvoke

+0

Evet, işte bu kadar. A ve B, B referansları A. A ve B çağrı yöntemi Thread.Sleep. B projesinin içinde Thread.Sleep'a bir yön koyarsınız. Sadece B'den Thread.Sleep'a yapılan aramalar engellenir, A. –

+0

numaralı telefondan aranmaz Ve P-Invoke'u sevdiğinizden beri P-Invoke yöntemlerine de yer vermek mümkündür :). –

İlgili konular