hendryluk / cormo

.NET Application Framework based on Spring and Java EE CDI
MIT License
5 stars 4 forks source link

Events and Observers #7

Closed hendryluk closed 9 years ago

hendryluk commented 9 years ago

Example

// This component triggers an event
public class Foo
{
  [Inject] Events<LoggedIn> _loggedInEvents;

  public void Login(User user)
  {
      _loggedInEvents.Trigger(new LoggedIn(user));
  }
}

// This component receives the event
public class Bar
{
  public void OnLoggedIn([Observes] LoggedIn evt, MyOtherInjectableComponent stuff)
  {
     /* handles */
  }
}

Qualifiers support

Injection:

[Inject, Admin] Events<LoggedIn> _loggedInEvents;

Observer:

public void OnLoggedIn([Observes, Admin] LoggedIn evt, MyOtherInjectableComponent stuff) { }
hendryluk commented 9 years ago

This should also supports generics and constraints resolutions. As an example:

public void OnCreated<T>([Observes] EntityCreated<T> evt, Repository<T> repo) 
    where T: IAuditable
{
   /* handles */
}

(This is not covered by CDI spec or Jboss Weld, since java doesn't have real generics. Lucky them...)

hendryluk commented 9 years ago

This has now been implemented. v0.0.1.15 (up on nuget)