[C#/.NET] Serviced Components, loosely coupled events

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ik ben wat aan het prutsen/testen/spelen met Serviced components en loosely coupled events in .NET

Nu heb ik volgende situatie:

Ik heb 2 classes en een interface:

code:
1
2
3
4
public interface IEvent
{
    void showmsg(string msg);
}


Van m'n 2 classes is er 1 een publisher, en een andere een subscriber.

code:
1
2
3
4
5
6
7
8
9
[EventClass]
public class MyPublisher : ServicedComponent, IEvent
{
   public MyPublisher()
   {
   }

   public void showmsg(string msg) {}
}


code:
1
2
3
4
5
6
7
8
9
10
11
public class MySubscriber : ServicedComponent, IEvent
{
    public MySubscriber()
    {
    }

    public void showmsg(string msg)
    {
         Application.MessageBox (msg);
    }
}


In m'n Windows Form, gebruik ik die classes als volgt:
code:
1
2
3
4
5
private void Button1_OnClick (object sender, System.EventArgs e)
{
      IEvent i = (IEvent) new MyPublisher()
      i.showmsg(textBox1.Text);
}


Nu, als ik op die button klik, dan zou ik hetgeen er in textBox1.Text staat, in een MessageBox moeten te zien krijgen. MyPublisher is nl. de publisher en de methode van de subscriber zou moeten uitgevoerd worden.
Echter, als ik op die knop klik, dan duurt het wel een tijdje eer m'n applicatie reageert, maar ik krijg niets te zien.
Ik heb een strong name aan m'n assembly gegeven enzo, en verder heb ik alle stapjes uit de tutorial gevolgd dacht ik, maar het blijkt niet te werken, terwijl het dat wel zou moeten doen.
Iemand een idee?

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
zal wel typo zijn maarre..
code:
1
2
3
4
5
private void Button1_OnClick (object sender, System.EventArgs e)
{
      IEvent i = (IEvent) new MyPublisher()
      i.showmsg(textBox1.Text);
}

Moet dat niet..
code:
1
2
3
4
5
private void Button1_OnClick (object sender, System.EventArgs e)
{
      IEvent i = (IEvent) new MySubscriber()
      i.showmsg(textBox1.Text);
}

zijn?

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Nope, dat moet MyPublisher zijn.
Dat is juist hetgeen er moet gebeuren. De publisher implementeert die method niet, en moet de functionaliteit van MySubscriber gaan uitvoeren.

Yarvieh kwam echter met deze oplossing:
In MMC, bij Component Services moet je nog handmatig een subscription toevoegen aan MySubscriber (en 't spul activeren).
Eens dat dat gedaan is, werkt het.
Echter, imho zou het toch ook mogelijk moeten zijn om die subscription via code te leggen. Echter, in m'n boek en tutorial wordt daar nergens over gesproken. :/

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ik heb die tutorial eens bekeken, maar ik snap niet goed waar dat contract nu daadwerkelijk gelegd wordt.

Ik zie wel dat er in die interface IEventSubscription een property is SubscriberInterface, maar ik vind niet direct een implementatie van die property.

[ Voor 43% gewijzigd door whoami op 05-09-2003 09:28 ]

https://fgheysels.github.io/


  • EfBe
  • Registratie: Januari 2000
  • Niet online
whoami schreef op 04 September 2003 @ 23:23:
Nope, dat moet MyPublisher zijn.
Dat is juist hetgeen er moet gebeuren. De publisher implementeert die method niet, en moet de functionaliteit van MySubscriber gaan uitvoeren.
Maar.. in je button code roep je de publisher aan, die heeft een lege showmessage routine. Daar gebeurt dus niks. Je subscriber roep je niet aan, althans niet met de code die je hebt gepaste :) Ik zie dus geen link tussen publisher en subscriber :) (en dus is het wat verwarrend hoe je dan het event van publisher naar subscriber denkt te sturen/door te geven)

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
EfBe schreef op 05 September 2003 @ 09:28:
[...]

Maar.. in je button code roep je de publisher aan, die heeft een lege showmessage routine. Daar gebeurt dus niks. Je subscriber roep je niet aan, althans niet met de code die je hebt gepaste :) Ik zie dus geen link tussen publisher en subscriber :) (en dus is het wat verwarrend hoe je dan het event van publisher naar subscriber denkt te sturen/door te geven)
Idd. Het is verwarrend. Zeker omdat er nergens in het boek noch in de tutorial stond dat je ergens een link tussen die 2 moest leggen.

Die link kan je dus leggen in je de 'Component Services' management tool. Echter, nu wil ik dat ook via code kunnen.
Ik ben nu die tutorial die Yarvieh gepost heeft aan het uitspitten, maar ik heb het nog niet echt kunnen vinden hoe ze het daar juist doen.

https://fgheysels.github.io/


Verwijderd

Ok aan je code te zien heb je deze documentatie gebruikt om je sample code in elkaar te klussen. Check de note die bijna boven aan staat. staat netjes dat je zelf de link moet maken tussen publisher en subscriber.

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ok, daar staat het idd. 'k Heb erover gelezen.

https://fgheysels.github.io/

Pagina: 1