Ich möchte eine Nachricht Bus erstellen, so dass ich einen Verleger schreiben wie folgt:Constrained generisches Ereignis in Delphi
unit Publisher;
interface
type
TStuffHasHappenedMessage
= class(TMessage)
public
Text: string;
constructor Create(aText: string);
end;
TSomeClass = class
procedure DoStuff;
end;
implementation
constructor TStuffHasHappenedMessage.Create(aText: string);
begin
Text := aText;
end;
procedure TSomeClass.DoStuff;
begin
...
TMessageBus.Notify(Self, TStuffHasHappenedMessage.Create('Some Text'));
end;
end.
und einem Teilnehmer wie folgt:
unit Subscriber;
interface
uses
Publisher;
TMyClass = class
procedure MyHandler(Sender: TObject; Message: TStuffHasHappenedMessage);
constructor Create;
end
constructor TMyClass.Create;
begin
TMessageBus.Subscribe(TStuffHasHappenedMessage, MyHandler);
end;
procedure TMyClass.MyHandler(Sender: TObject; Message: TStuffHasHappenedMessage);
begin
ShowMessage(Message.Text)
end;
end.
Ich möchte schließlich vermeiden eine Art Guss in „MyHandler“ durch einen Anruf Lassen „Subcribe“ mit jedem Handler der gattungsgemäßen Art:
THandler<T:TMessage> = procedure (Sender: TObject: Message: T);
Ich kann nicht herausfinden, wie "TMessageBus.Subscribe" deklariert und implementiert werden kann, um dies zu unterstützen.
Es ist schwer, Sie Ziele hier zu erzählen. Der Code ist fragmentiert und wir können das Design, die Motivation usw. nicht sehen. MyClass.MyHandler ist seltsam, weil er Self nicht verwendet. –
Sorry - Ich werde versuchen, es klarer zu machen –
Das ist aus meiner Sicht keine gute Frage und wird für andere wenig Wert haben. Daher bedeutet ein niedriger Wert, dass er bei der Suche nicht hoch eingestuft wird. So sollen die Dinge sein. –