<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>Event Aggregator</title><link>http://eventaggregator.codeplex.com/project/feeds/rss</link><description>Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.</description><item><title>New Post: Unsubscribe Method</title><link>http://eventaggregator.codeplex.com/discussions/432132</link><description>&lt;div style="line-height: normal;"&gt;Yes I found it in sources. But it no so obvious looking simply on the class (extention class)&lt;br /&gt;
&lt;/div&gt;</description><author>signoff</author><pubDate>Wed, 06 Feb 2013 17:30:03 GMT</pubDate><guid isPermaLink="false">New Post: Unsubscribe Method 20130206053003P</guid></item><item><title>New Post: Unsubscribe Method</title><link>http://eventaggregator.codeplex.com/discussions/432132</link><description>&lt;div style="line-height: normal;"&gt;Hello,&lt;br /&gt;
&lt;br /&gt;
When you call the Subscribe method, it returns EventMessageHandler which implements IDisposable.&lt;br /&gt;
Call Dispose method, if you want to unsubscribe a handler.&lt;br /&gt;
&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Wed, 06 Feb 2013 16:54:04 GMT</pubDate><guid isPermaLink="false">New Post: Unsubscribe Method 20130206045404P</guid></item><item><title>New Post: Unsubscribe Method</title><link>http://eventaggregator.codeplex.com/discussions/432132</link><description>&lt;div style="line-height: normal;"&gt;un subscribe method should be public at least ?&lt;br /&gt;
&lt;/div&gt;</description><author>SignOff</author><pubDate>Wed, 06 Feb 2013 06:22:57 GMT</pubDate><guid isPermaLink="false">New Post: Unsubscribe Method 20130206062257A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=29</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;[ &lt;a href="https://github.com/timothy-makarov/AsyncEventAggregator"&gt;Asynchronous Event Aggregator&lt;/a&gt; ]&lt;/h1&gt;C# .NET TPL Based Event Aggregator with Subscribe/Publish Interface
&lt;hr /&gt;

&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast.&lt;br /&gt;Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Sat, 02 Feb 2013 10:42:35 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130202104235A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=28</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;[ &lt;a href="https://github.com/timothy-makarov/AsyncEventAggregator"&gt;Async Event Aggregator&lt;/a&gt; ]&lt;/h1&gt;C# .NET TPL Based Event Aggregator with Subscribe/Publish Interface
&lt;hr /&gt;

&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast.&lt;br /&gt;Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Sat, 02 Feb 2013 10:41:55 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130202104155A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=27</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast.&lt;br /&gt;Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Tue, 22 Jan 2013 18:22:44 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130122062244P</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=26</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Mon, 21 Jan 2013 09:06:44 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130121090644A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=25</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;br /&gt; &lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Mon, 21 Jan 2013 09:05:51 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130121090551A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=24</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Mon, 21 Jan 2013 09:05:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130121090525A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=23</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system.&lt;br /&gt;See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>timothy_makarov</author><pubDate>Mon, 21 Jan 2013 09:05:05 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130121090505A</guid></item><item><title>Reviewed: Event Aggregator v1.0 (Jan 20, 2013)</title><link>http://eventaggregator.codeplex.com/releases/view/86320#ReviewBy-sotronix</link><description>Rated 5 Stars &amp;#40;out of 5&amp;#41; - Using MVP-VM Eventaggregator saves me a lot of work and decouples my designs in a greatfull manner.&amp;#10;Thanks a lot for your efforts and sharing this with the community.</description><author>sotronix</author><pubDate>Sun, 20 Jan 2013 10:33:43 GMT</pubDate><guid isPermaLink="false">Reviewed: Event Aggregator v1.0 (Jan 20, 2013) 20130120103343A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=22</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system! See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>DarkVasya</author><pubDate>Wed, 19 Dec 2012 14:29:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121219022920P</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=21</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with message coupling and event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;One of the key aspects in application design is managing dependencies between modules. Good architecture might begin to suffer from strong coupling as long as the project grows. All this affects further development by making it harder to change modules &amp;#40;a change in one module usually forces a ripple effect of changes in other modules&amp;#41;, also strongly coupled modules are harder to reuse and test.&lt;br /&gt;&lt;br /&gt;Message coupling is a good choice in developing loosely coupled architecture. This is the loosest type of coupling. It can be achieved by state decentralization and module communication is done via message passing.&lt;br /&gt;&lt;br /&gt;The Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;&lt;br /&gt;Event Aggregator project allows you to use event aggregation via extension methods, so you do not have to implement extra interfaces in order to support event aggregation in your code. Event Aggregator implements observer pattern and dispose pattern to manage event messaging, making your code more flexible and easier to test.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; depending on the system! See &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt;.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>DarkVasya</author><pubDate>Wed, 19 Dec 2012 14:03:33 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20121219020333P</guid></item><item><title>Source code checked in, #19162</title><link>http://eventaggregator.codeplex.com/SourceControl/changeset/changes/19162</link><description>Upgrade&amp;#58; New Version of LabDefaultTemplate.xaml. To upgrade your build definitions, please visit the following link&amp;#58; http&amp;#58;&amp;#47;&amp;#47;go.microsoft.com&amp;#47;fwlink&amp;#47;&amp;#63;LinkId&amp;#61;254563</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 20:50:51 GMT</pubDate><guid isPermaLink="false">Source code checked in, #19162 20121001085051P</guid></item><item><title>Source code checked in, #19161</title><link>http://eventaggregator.codeplex.com/SourceControl/changeset/changes/19161</link><description>Checked in by server upgrade</description><author>Project Collection Service Accounts</author><pubDate>Mon, 01 Oct 2012 20:49:54 GMT</pubDate><guid isPermaLink="false">Source code checked in, #19161 20121001084954P</guid></item><item><title>Source code checked in, #17271</title><link>http://eventaggregator.codeplex.com/SourceControl/changeset/changes/17271</link><description>Changed project structure</description><author>DarkVasya</author><pubDate>Sat, 28 Jul 2012 22:00:15 GMT</pubDate><guid isPermaLink="false">Source code checked in, #17271 20120728100015P</guid></item><item><title>Source code checked in, #17270</title><link>http://eventaggregator.codeplex.com/SourceControl/changeset/changes/17270</link><description>Performance optimizations &amp;#40;removed LINQ from EventHub&amp;#41;&amp;#13;&amp;#10;</description><author>DarkVasya</author><pubDate>Sat, 28 Jul 2012 21:56:11 GMT</pubDate><guid isPermaLink="false">Source code checked in, #17270 20120728095611P</guid></item><item><title>Updated Wiki: EventAggregatorPerfTest</title><link>http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Performance Test&lt;/h2&gt;
&lt;img src="http://i3.codeplex.com/Download?ProjectName=eventaggregator&amp;DownloadId=366005" alt="Single&amp;#32;Event&amp;#32;Processing&amp;#32;Time" title="Single&amp;#32;Event&amp;#32;Processing&amp;#32;Time" /&gt;&lt;br /&gt;&lt;b&gt;Figure 1.&lt;/b&gt; Time dependency of a single event processing from total processed event count for one sender and one subscriber.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=eventaggregator&amp;DownloadId=366006" alt="Total&amp;#32;Event&amp;#32;Processing&amp;#32;Time" title="Total&amp;#32;Event&amp;#32;Processing&amp;#32;Time" /&gt;&lt;br /&gt;&lt;b&gt;Figure 2.&lt;/b&gt; Time dependecy of total processing time from total processed event count  for one sender and one subscriber.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=eventaggregator&amp;DownloadId=366029" alt="Single&amp;#32;Event&amp;#32;Processing&amp;#32;Time" title="Single&amp;#32;Event&amp;#32;Processing&amp;#32;Time" /&gt;&lt;br /&gt;&lt;b&gt;Figure 3.&lt;/b&gt; Time dependecy of a single event processing from total processed event count for one sender and multiple receivers.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=eventaggregator&amp;DownloadId=366030" alt="Total&amp;#32;Event&amp;#32;Processing&amp;#32;Time" title="Total&amp;#32;Event&amp;#32;Processing&amp;#32;Time" /&gt;&lt;br /&gt;&lt;b&gt;Figure 4.&lt;/b&gt; Time dependecy of total processing time from total processed event count for one sender and multiple receivers.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>DarkVasya</author><pubDate>Wed, 04 Jul 2012 08:01:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: EventAggregatorPerfTest 20120704080122A</guid></item><item><title>Updated Wiki: Home</title><link>http://eventaggregator.codeplex.com/wikipage?version=20</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Loosely coupled design with message coupling and event aggregation&lt;/h1&gt;&lt;h2&gt;Description&lt;/h2&gt;One of the key aspects in application design is managing dependencies between modules. Good architecture might begin to suffer from strong coupling as long as the project grows. All this affects further development by making it harder to change modules &amp;#40;a change in one module usually forces a ripple effect of changes in other modules&amp;#41;, also strongly coupled modules are harder to reuse and test.&lt;br /&gt;&lt;br /&gt;Message coupling is a good choice in developing loosely coupled architecture. This is the loosest type of coupling. It can be achieved by state decentralization and module communication is done via message passing.&lt;br /&gt;&lt;br /&gt;The Event Aggregator aggregates events from multiple objects into itself, passing that same event onto its observers.&lt;br /&gt;&lt;br /&gt;Event Aggregator project allows you to use event aggregation via extension methods, so you do not have to implement extra interfaces in order to support event aggregation in your code. Event Aggregator implements observer pattern and dispose pattern to manage event messaging, making your code more flexible and easier to test.&lt;br /&gt;
&lt;h2&gt;Simple&lt;/h2&gt;You can fire up any type of event.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;App.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            Current.MainWindow = new MainWindow();

            this.Send(EventId.Default.AppStartup);
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;Handle fired event whenever you need.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;MainWindow.xaml.cs&lt;/i&gt;&lt;br /&gt;&lt;pre&gt;
using System.Windows;
using EventAggregator;

namespace EventAggregatorSample
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            this.Subscribe(EventId.Default.AppStartup, HandleAppStartup);
        }

        private void HandleAppStartup(EventMessage eventMessage)
        {
            Show();
        }
    }
}
&lt;/pre&gt;&lt;br /&gt;It is simple and makes no couplings between modules.&lt;br /&gt;
&lt;h2&gt;Performance&lt;/h2&gt;It is very fast. You can see for yourself the &lt;a href="http://eventaggregator.codeplex.com/wikipage?title=EventAggregatorPerfTest&amp;referringTitle=Home"&gt;performance test results&lt;/a&gt; for &lt;b&gt;Event Aggregator&lt;/b&gt;. Single event processing takes &lt;b&gt;25-30 μs&lt;/b&gt; no matter how many senders or subscribers you have!&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>DarkVasya</author><pubDate>Wed, 04 Jul 2012 07:57:21 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120704075721A</guid></item><item><title>Project License Changed</title><link>http://eventaggregator.codeplex.com/license?LicenseHistoryId=92470</link><description>Microsoft Public License &amp;#40;Ms-PL&amp;#41;&amp;#13;&amp;#10;&amp;#13;&amp;#10;This license governs use of the accompanying software. If you use the software, you accept this license. If you do not accept the license, do not use the software.&amp;#13;&amp;#10;&amp;#13;&amp;#10;1. Definitions&amp;#13;&amp;#10;&amp;#13;&amp;#10;The terms &amp;#34;reproduce,&amp;#34; &amp;#34;reproduction,&amp;#34; &amp;#34;derivative works,&amp;#34; and &amp;#34;distribution&amp;#34; have the same meaning here as under U.S. copyright law.&amp;#13;&amp;#10;&amp;#13;&amp;#10;A &amp;#34;contribution&amp;#34; is the original software, or any additions or changes to the software.&amp;#13;&amp;#10;&amp;#13;&amp;#10;A &amp;#34;contributor&amp;#34; is any person that distributes its contribution under this license.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#34;Licensed patents&amp;#34; are a contributor&amp;#39;s patent claims that read directly on its contribution.&amp;#13;&amp;#10;&amp;#13;&amp;#10;2. Grant of Rights&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;A&amp;#41; Copyright Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free copyright license to reproduce its contribution, prepare derivative works of its contribution, and distribute its contribution or any derivative works that you create.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;B&amp;#41; Patent Grant- Subject to the terms of this license, including the license conditions and limitations in section 3, each contributor grants you a non-exclusive, worldwide, royalty-free license under its licensed patents to make, have made, use, sell, offer for sale, import, and&amp;#47;or otherwise dispose of its contribution in the software or derivative works of the contribution in the software.&amp;#13;&amp;#10;&amp;#13;&amp;#10;3. Conditions and Limitations&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;A&amp;#41; No Trademark License- This license does not grant you rights to use any contributors&amp;#39; name, logo, or trademarks.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;B&amp;#41; If you bring a patent claim against any contributor over patents that you claim are infringed by the software, your patent license from such contributor to the software ends automatically.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;C&amp;#41; If you distribute any portion of the software, you must retain all copyright, patent, trademark, and attribution notices that are present in the software.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;D&amp;#41; If you distribute any portion of the software in source code form, you may do so only under this license by including a complete copy of this license with your distribution. If you distribute any portion of the software in compiled or object code form, you may only do so under a license that complies with this license.&amp;#13;&amp;#10;&amp;#13;&amp;#10;&amp;#40;E&amp;#41; The software is licensed &amp;#34;as-is.&amp;#34; You bear the risk of using it. The contributors give no express warranties, guarantees or conditions. You may have additional consumer rights under your local laws which this license cannot change. To the extent permitted under your local laws, the contributors exclude the implied warranties of merchantability, fitness for a particular purpose and non-infringement.</description><author></author><pubDate>Wed, 27 Jun 2012 08:43:58 GMT</pubDate><guid isPermaLink="false">Project License Changed 20120627084358A</guid></item></channel></rss>