2009-03-31 8 views
1

Betrachten Sie die folgende Schnittstelle:Kann/sollte ich ein Mocking-Framework verwenden, um Ereignisse dynamisch zu einer Klasse hinzuzufügen?

public interface IMyCallback 
{ 
    void SomeEvent(int someArg); 
} 

, die den Vertrag für einen WCF-Callback ist die „Ereignisse“ von einem WCF-Dienst wird empfangen. Meine Implementierung für diese Schnittstelle sieht wie folgt aus

public class MyCallback : IMyCallback 
{ 
    void IMyCallback.SomeEvent(int someArg) 
    { 
    OnSomeEvent(someArg); 
    } 

    protected virtual void OnSomeEvent(int someArg) 
    { 
    EventHandler<SomeEventArgs> handler = this.SomeEvent; 

    if (handler != null) 
    { 
     handler(this, new SomeEventArgs(someArg)); 
    } 
    } 

    public event EventHandler<SomeEventArgs> SomeEvent; 
} 

, die mir erlaubt, den Rückruf zu instanziiert und die Someevent Ereignis in meinem Client-Code einhaken. Immer wenn der Server meinen Rückruf aufruft, erhalte ich ein einfaches altes .NET-Ereignis. Alles funktioniert super.

Hier kommt die Frage: Ich möchte eine Factory-Klasse schreiben, die Schaffung dieser Rückruf zu automatisieren, damit ich leicht wiederverwenden, diesen Ansatz in allen meinen Projekten und mit jeder Schnittstelle. Die Fabrik würde wie folgt aufgerufen werden:

var myCallback = CallbackFactory.CreateCallback<IMyCallback>(); 

kann/sollte ich einen Mockframework verwenden dynamisch diese Klasse zu erstellen, oder sollte ich den sauren Apfel beißen und emittieren IL direkt? Oder sollte ich einfach jede Implementierung codieren? Oder gibt es einen anderen Ansatz, an den ich nicht denke?

Antwort

1

könnten Sie Castle Project's DynamicProxy verwenden, die Sie die ganze Infrastruktur geben, sollten Sie brauchen, um einen Proxy zu generieren. Dann müssen Sie sich keine Gedanken über das Auslösen von IL machen, was unangenehme Nebenwirkungen haben kann, wenn es nicht richtig gemacht wird.

Ich weiß nicht, wie Sie an das Ereignis im Benutzercode bei der Verwendung des Proxys anhängen möchten, einfach weil Ihr IMyCallback nicht das eigentliche Ereignis in ihm nur das eine aufgerufen hat. Oder habe ich deine Frage missverstanden?

0

Ich denke, dass ein Mockframework mit fein ist. Im Wesentlichen ist ein spöttischer/Stub Rahmen nicht mehr als eine Art und Weise Implementierungen für Typdefinitionen für bekannte Eingaben leicht bereitzustellen.

Da das ist genau das, was Sie hier tun, sage ich mit, dass gehen.

Verwandte Themen