2009-04-01 12 views
0

Ich erhalte Methodenaufrufe in ein ContextBoundObject. Gibt es eine Möglichkeit, den Typ des Objekts, das ich anrufe, in der Nachrichtensenke zu erreichen?Abrufen des Typs eines ContextBoundObject beim Abfangen eines Methodenaufrufs

Say I

[Intercept] 
[Synchronization] 
public class Test : ContextBoundObject 
{ 
    [Timeout(10010)] 
    public void Method() 
    { 
     // Do something 
    } 
} 

In den Nachrichtensenke eine Klasse habe, bevor der Anruf durch someway ist es zu Method gesetzt wird halten, die Test Art zu bekommen, so kann ich die benutzerdefinierte Abfrage Timeout Attribut?

zB
public IMessage SyncProcessMessage(IMessage msg) 
{ 
     Type type = GetType(); // << Need to get hold of Test type here 
     object[] custom = type.GetMethod("Method").GetCustomAttributes(false);; 
     TimeoutAttribute ta = custom[0] as TimeoutAttribute; 
     int time = ta.Ticks; 

     IMessage returnedMessage = _nextSink.SyncProcessMessage(msg); 
     return returnedMessage; 
} 

ta

Antwort

0

Nach einem kleinen Messing fand ich es.

Der Typname wird in SyncProcessMessage im Eigenschaftenwörterbuch in IMessage übergeben.

So oberhalb der Code wird

public IMessage SyncProcessMessage(IMessage msg) 
{ 
     Type type = Type.GetType(msg.Properties["__TypeName"].ToString()); 

     object[] custom = type.GetMethod("Method").GetCustomAttributes(false); 
     TimeoutAttribute ta = custom[0] as TimeoutAttribute; 
     int time = ta.Ticks; 

     IMessage returnedMessage = _nextSink.SyncProcessMessage(msg); 
     return returnedMessage; 
} 
Verwandte Themen