Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.
The Unity Application Block IoC Container comes with a little know extension for creating loosely coupled events called the Simple Event Broker. The Unity Event Broker supports multiple publishers and multiple subscribers to the same event name. The decoupled model prevents subscribers from knowing about publishers and publishers from knowing about subscribers.
The Event Broker source code can be found under the Unity Quick Starts normally located here
"C:\Program Files\Microsoft Unity Application Block 1.0\UnityQuickStarts.zip\UnityQuickStarts\CS\EventBroker.sln".
In order to use the Extension make sure you have your project reference the EventBrokerExtension.dll and the SimpleEventBroker.dll.
Next, you need to configure Unity by adding the Event Broker Extension to the Container.
private static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); UnityContainer rootContainer = new UnityContainer(); rootContainer.AddNewExtension<SimpleEventBrokerExtension>(); Application.Run(rootContainer.Resolve<DefaultForm>()); }
This gives you two new Attributes recognized by Unity, [Publishes(eventName)] and [SubscribesTo(eventName)] where eventName is a string that uniquely identifies the loosely coupled event.
The attribute [Publishes] is applied to an event and lets the event broker know that when this event is raised, any methods that are subscribed to eventName are called.
For Example:
[Publishes("event://Transaction/Complete")] public event EventHandler TransactionComplete;
Best Practice:
It is recommended that you not hard code the Event Name parameter. Instead use a class that contains the event names as public string constants.
[SubscribesTo(EventTopicNames.TransactionComplete)]
This prevents typos in the event name string and also allows a Usages Search in Visual Studio to quickly locate all Publishers and all Subscribers of an event.
The event broker will create a loosely coupled event named "event://Transaction/Completed" [1] and link the .NET event TransactionComplete [2] to it. The following subscriber code
[SubscribesTo("event://Transaction/Complete")] public void TransactionCompleteHandler(object sender, EventArgs e) { //Do Something..... }
informs the Event Broker that method TransactionCompleteHandler [3] needs to be called whenever the loosely coupled event named "event://Transaction/Completed" is published. Notice that neither the publisher nor the subscriber is aware of the other.
The ability for your application to communicate between controls without resorting to directly linking one class to another increases the reusability of your code. The Unity Event Broker is, as it's name implies, a rather simple implementation of loosely coupled events but it is a good start none the less. for example, I would like to see a way for subscribers to indicate that methods should be called on a background thread instead of always on the Publisher's thread. In future posts I will show how to register events for publication when you cannot add the [Publishes] attribute directly to an event declaration (useful for Button and Menu Click events or third part controls)
Remember Me
a@href@title, b, blockquote@cite, em, i, strike, strong, sub, sup, u