diff --git a/Rhino.ServiceBus.Tests/Rhino.ServiceBus.Tests.csproj b/Rhino.ServiceBus.Tests/Rhino.ServiceBus.Tests.csproj
index 98751bc..bc30cc2 100644
--- a/Rhino.ServiceBus.Tests/Rhino.ServiceBus.Tests.csproj
+++ b/Rhino.ServiceBus.Tests/Rhino.ServiceBus.Tests.csproj
@@ -106,7 +106,7 @@
-
+
diff --git a/Rhino.ServiceBus.Tests/RhinoQueues/CanAddHeadersToMessage.cs b/Rhino.ServiceBus.Tests/RhinoQueues/CanAddHeadersToMessage.cs
deleted file mode 100644
index e2a5fec..0000000
--- a/Rhino.ServiceBus.Tests/RhinoQueues/CanAddHeadersToMessage.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-using System;
-using Castle.MicroKernel.Registration;
-using Castle.Windsor;
-using Rhino.Queues;
-using Rhino.ServiceBus.Impl;
-using Rhino.ServiceBus.RhinoQueues;
-using Xunit;
-
-namespace Rhino.ServiceBus.Tests.RhinoQueues
-{
- public class CanAddHeadersToMessage:IDisposable
- {
- private WindsorContainer container;
-
- public CanAddHeadersToMessage()
- {
- container = new WindsorContainer("RhinoQueues/RhinoQueues.config");
-
- container.Register(Component.For>().ImplementedBy());
- container.AddFacility("rhino.esb", new RhinoServiceBusFacility());
-
-
- }
-
-
- [Fact]
- public void it_should_add_custom_header_to_headers_collection()
- {
- var builder = container.Resolve>();
- builder.Initialize(new Endpoint {Uri = RhinoQueuesOneWayBus.NullEndpoint});
- var msg = builder.BuildFromMessageBatch("somemsg");
- Assert.NotNull(msg);
- Assert.NotEqual(0,msg.Data.Length);
- Assert.Equal("mikey",msg.Headers["user-id"]);
-
- }
-
- public class CustomHeaderBuilder : IMessageBuilder
- {
- private IMessageBuilder inner;
-
- public CustomHeaderBuilder(IMessageBuilder inner)
- {
- this.inner = inner;
- }
-
- public MessagePayload BuildFromMessageBatch(params object[] msgs)
- {
- var payload = inner.BuildFromMessageBatch(msgs);
- Contextualize(payload);
- return payload;
- }
-
- public void Initialize(Endpoint source)
- {
- inner.Initialize(source);
- }
-
- private static void Contextualize(MessagePayload message)
- {
- message.Headers.Add("user-id","mikey");
- }
- }
-
- public void Dispose()
- {
- container.Dispose();
- }
- }
-}
\ No newline at end of file
diff --git a/Rhino.ServiceBus.Tests/RhinoQueues/CustomizingMessageConstruction.cs b/Rhino.ServiceBus.Tests/RhinoQueues/CustomizingMessageConstruction.cs
new file mode 100644
index 0000000..055697c
--- /dev/null
+++ b/Rhino.ServiceBus.Tests/RhinoQueues/CustomizingMessageConstruction.cs
@@ -0,0 +1,90 @@
+using System;
+using System.Collections.Specialized;
+using Castle.Core;
+using Castle.MicroKernel.Registration;
+using Castle.Windsor;
+using Rhino.Queues;
+using Rhino.ServiceBus.Impl;
+using Rhino.ServiceBus.Internal;
+using Rhino.ServiceBus.RhinoQueues;
+using Xunit;
+
+namespace Rhino.ServiceBus.Tests.RhinoQueues
+{
+ public class CustomizingMessageConstruction
+ {
+
+ [Fact]
+ public void it_should_add_custom_header_to_headers_collection_using_builder()
+ {
+ using( var container = new WindsorContainer("RhinoQueues/RhinoQueues.config"))
+ {
+ container.Register(Component.For>().ImplementedBy());//before facility
+ container.AddFacility("rhino.esb", new RhinoServiceBusFacility());
+
+ var builder = container.Resolve>();
+ builder.Initialize(new Endpoint { Uri = RhinoQueuesOneWayBus.NullEndpoint });
+ var msg = builder.BuildFromMessageBatch("somemsg");
+ Assert.NotNull(msg);
+ Assert.NotEqual(0, msg.Data.Length);
+ Assert.Equal("mikey", msg.Headers["user-id"]);
+ }
+
+ }
+
+ [Fact]
+ public void it_should_add_custom_header_to_headers_collection_using_interface()
+ {
+ using (var container = new WindsorContainer("RhinoQueues/RhinoQueues.config"))
+ {
+ container.AddFacility("rhino.esb", new RhinoServiceBusFacility());
+ container.Register(Component.For().ImplementedBy().LifeStyle.Is(LifestyleType.Transient));
+
+ var builder = container.Resolve>();
+ builder.Initialize(new Endpoint { Uri = RhinoQueuesOneWayBus.NullEndpoint });
+ var msg = builder.BuildFromMessageBatch("somemsg");
+ Assert.NotNull(msg);
+ Assert.NotEqual(0, msg.Data.Length);
+ Assert.Equal("mikey", msg.Headers["user-id"]);
+ }
+
+ }
+
+ public class CustomHeaderBuilder : IMessageBuilder
+ {
+ private IMessageBuilder inner;
+
+ public CustomHeaderBuilder(IMessageBuilder inner)
+ {
+ this.inner = inner;
+ }
+
+ public MessagePayload BuildFromMessageBatch(params object[] msgs)
+ {
+ var payload = inner.BuildFromMessageBatch(msgs);
+ Contextualize(payload);
+ return payload;
+ }
+
+ public void Initialize(Endpoint source)
+ {
+ inner.Initialize(source);
+ }
+
+ private static void Contextualize(MessagePayload message)
+ {
+ message.Headers.Add("user-id","mikey");
+ }
+ }
+ public class AppIdentityCustomizer : ICustomizeMessageHeaders
+ {
+ public void Customize(NameValueCollection headers)
+ {
+ headers.Add("user-id","mikey");
+ }
+ }
+
+ }
+
+
+}
\ No newline at end of file
diff --git a/Rhino.ServiceBus/ICustomizeMessageHeaders.cs b/Rhino.ServiceBus/ICustomizeMessageHeaders.cs
new file mode 100644
index 0000000..66f6295
--- /dev/null
+++ b/Rhino.ServiceBus/ICustomizeMessageHeaders.cs
@@ -0,0 +1,9 @@
+using System.Collections.Specialized;
+
+namespace Rhino.ServiceBus
+{
+ public interface ICustomizeMessageHeaders
+ {
+ void Customize(NameValueCollection headers);
+ }
+}
\ No newline at end of file
diff --git a/Rhino.ServiceBus/IMessageBuilder.cs b/Rhino.ServiceBus/Internal/IMessageBuilder.cs
similarity index 79%
rename from Rhino.ServiceBus/IMessageBuilder.cs
rename to Rhino.ServiceBus/Internal/IMessageBuilder.cs
index 211f1ac..906291a 100644
--- a/Rhino.ServiceBus/IMessageBuilder.cs
+++ b/Rhino.ServiceBus/Internal/IMessageBuilder.cs
@@ -1,4 +1,4 @@
-namespace Rhino.ServiceBus
+namespace Rhino.ServiceBus.Internal
{
public interface IMessageBuilder
{
diff --git a/Rhino.ServiceBus/Msmq/MsmqOnewayBus.cs b/Rhino.ServiceBus/Msmq/MsmqOnewayBus.cs
index 0527b48..a64c206 100644
--- a/Rhino.ServiceBus/Msmq/MsmqOnewayBus.cs
+++ b/Rhino.ServiceBus/Msmq/MsmqOnewayBus.cs
@@ -1,5 +1,6 @@
using System.Messaging;
using Rhino.ServiceBus.Impl;
+using Rhino.ServiceBus.Internal;
namespace Rhino.ServiceBus.Msmq
{
diff --git a/Rhino.ServiceBus/Rhino.ServiceBus.csproj b/Rhino.ServiceBus/Rhino.ServiceBus.csproj
index c9d37ee..39c5018 100644
--- a/Rhino.ServiceBus/Rhino.ServiceBus.csproj
+++ b/Rhino.ServiceBus/Rhino.ServiceBus.csproj
@@ -97,6 +97,7 @@
+
@@ -217,7 +218,7 @@
-
+
diff --git a/Rhino.ServiceBus/RhinoQueues/RhinoQueuesMessageBuilder.cs b/Rhino.ServiceBus/RhinoQueues/RhinoQueuesMessageBuilder.cs
index 85747e7..aabcb31 100644
--- a/Rhino.ServiceBus/RhinoQueues/RhinoQueuesMessageBuilder.cs
+++ b/Rhino.ServiceBus/RhinoQueues/RhinoQueuesMessageBuilder.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Specialized;
using System.IO;
using Rhino.Queues;
using Rhino.ServiceBus.Internal;
@@ -40,9 +41,19 @@ public MessagePayload BuildFromMessageBatch(params object[] msgs)
{"source", endpoint.Uri.ToString()},
}
};
+
+ TryCustomizeHeaders(payload.Headers);
return payload;
}
-
+
+ private void TryCustomizeHeaders(NameValueCollection headers)
+ {
+ if (MessageHeaders == null)
+ return;
+ MessageHeaders.Customize(headers);
+ }
+
+ public ICustomizeMessageHeaders MessageHeaders { get; set; }
public void Initialize(Endpoint source)
{
endpoint = source;