public void MultipleMessagesAreRecognizedByProcessor()
		{
			var processor = new FakeMultipleMessageProcessor();

			var fakeMessage = new FakeMessage();
			var differentMessage = new DifferentFakeMessage();

			Assert.IsTrue(processor.CanProcessMessage(fakeMessage));
			Assert.IsTrue(processor.CanProcessMessage(differentMessage));
		}
		public void Process(DifferentFakeMessage message)
		{
			ProcessedMessages++;
		}
		public void DispatchesMessagesToSameProcessor()
		{
			var settings = new MessageDispatcherSettings();

			settings.InputChannel.WithDefault(new InMemoryMessageChannel());
			settings.InvalidChannel.WithDefault(new InMemoryMessageChannel());
			settings.MessageProcessorTypes.WithDefault(new List<Type> { typeof(FakeMultipleMessageProcessor) });
			settings.DurationOfDispatchingSlice.WithDefault(new TimeSpan(0, 0, 0, 0, 200));
			settings.NumberOfMessagesToDispatchPerSlice.WithDefault(30);

			_dispatcher.Configure(settings);

			_dispatcher.Enable();

			_transport.Open();

			var fakeMessage = new FakeMessage();
			var differentFakeMessage = new DifferentFakeMessage();

			_transport.Send(_registry.PublishMessage(fakeMessage));
			_transport.Send(_registry.PublishMessage(differentFakeMessage));

			Assert.AreEqual(MessageDispatcherState.Enabled, _dispatcher.State);

			Thread.Sleep(5000); // wait for message to be processed

			Assert.AreEqual(2, FakeMultipleMessageProcessor.ProcessedMessages);

			_dispatcher.Disable();

			Assert.AreEqual(MessageDispatcherState.Disabled, _dispatcher.State);

			Assert.NotNull(_dispatcher);
		}