#region License
/*
* Copyright 2002-2006 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#endregion
#region Imports
using System;
using Spring.Context;
using Spring.Context.Support;
#endregion
namespace Spring.IocQuickStart.EventRegistry{
/// <summary>
/// Small example application showing how objects can publish their events
/// to an IApplicationContex.
/// </summary>
/// <remarks>
/// <p>
/// The example then goes on to illustrate how subscribers can subscribe to
/// any events by notifying an IApplicationContext instance. The context
/// will only wire events and event handlers if they have compatible
/// signatures.
/// </p>
/// </remarks>
public sealed class Program
{
/// <summary>
/// In this example, the subscriber is subscribing by publisher type.
/// </summary>
[STAThread]
public static void Main()
{
try
{
// Retrieve context defined in the spring/context section of
// the standard .NET configuration file.
using (IApplicationContext ctx = ContextRegistry.GetContext())
{
// gets the publisher from the application context...
MyEventPublisher publisher = (MyEventPublisher) ctx.GetObject("MyEventPublisher");
// publishes events to the context...
ctx.PublishEvents(publisher);
// gets first instance of subscriber...
MyEventSubscriber subscriber = (MyEventSubscriber) ctx.GetObject("MyEventSubscriber");
// gets second instance of subscriber...
MyEventSubscriber subscriber2 = (MyEventSubscriber) ctx.GetObject("MyEventSubscriber");
// subscribes the first instance to any events published by the MyEventPublisher type...
ctx.Subscribe(subscriber, typeof (MyEventPublisher));
Console.WriteLine("Publisher name: " + publisher.PublisherName);
// must be false for both subscribers as no event has yet been raised...
Console.WriteLine("Subscriber 1 Event Handled: " + subscriber.EventHandled);
Console.WriteLine("Subscriber 2 Event Handled: " + subscriber2.EventHandled);
// raises a publisher event...
publisher.ClientMethodThatTriggersEvent1();
// must be true (subscribed to any events)...
Console.WriteLine("Subscriber 1 Event Handled: " + subscriber.EventHandled);
// must be false (did not subscribe to any events)...
Console.WriteLine("Subscriber 2 Event Handled: " + subscriber2.EventHandled);
}
}
catch (Exception ex)
{
Console.WriteLine(ex);
}
finally
{
Console.WriteLine();
Console.WriteLine("--- hit <return> to quit ---");
Console.ReadLine();
}
}
}
}
|