dynamic
yöntem çağrılarını (özellikle RuntimeBinderException
s yükseltecek olanlar) RealProxy
ile kesişmenin bir yolu var mı? Bunun istisnasını yakalamayı ve bunun üzerinde 'metodun eksikliğini' uyguladığımı umuyordum, ama ara vericiye bakmadan önce atılmış gibi görünüyor.C# 4.0'deki eksik yöntem eksiklikleri: dinamik vs RealProxy
Testim sadece benziyor:
World
aslında
DynamicObject
üzerinde uygulanmadı
dynamic hello = MethodMissingInterceptor<DynamicObject>.Create();
Assert.AreEqual("World", hello.World());
. önleme oldukça basittir - Ben RuntimeBinderException
için IMethodReturnMessage.Exception
kontrol ve benzeri bir şey üzerine iletmek için umuyordum:
public IMessage MethodMissing(IMethodCallMessage call)
{
return new ReturnMessage(call.MethodBase.Name, new object[0], 0, call.LogicalCallContext, call);
}
Ne yazık ki, benim yakalayıcısı bakın hepsi bir GetType
yapılan çağrılar değil, var olmayan World
yöntemdir .
Başarısızlık - .NET 4.0'da mutlu çalışan bir DynamicProxy
sürümü olup olmadığını henüz bilmiyor, ancak bu sorunla uğraşmış olabilir mi?
Kusursuz bir açıklama için teşekkürler, Chris - Blogunuzda C# 'dinamik' yazı dizilerinden devam etmeye başladım. :) Amaçlarım için, ilk çözümünüz işe yarayacakmış gibi geliyor. Bu çağrıları yalnızca yapımcı nesneler için yapmak ve API'ları test etme konusunda bazı akıcılık kazandırmak istiyorum, bunları keyfi nesnelerde yakalamam gerekmez. – Thom
@Chris - "sadece durumda" nın yukarıdaki soruya da dikkat edin; Aslında bunu bilmek isterim; -p –
Dinamik nesneyi, bir üyenin varlığını gerçekten aramadan sorgulamak için bir yolu var mı? –