Skip to content

Commit

Permalink
Bug fix and extension method
Browse files Browse the repository at this point in the history
+ Fix bug in AbstractBootStrapper where ability to provide a config
section (other than the default) was broken.
+ Moved castle consumer registration into an extension method for use
outside the bootstrapper without copy-and-pasting.
  • Loading branch information
mr-miles authored and CoreyKaylor committed Apr 22, 2013
1 parent 56f8c38 commit 214bc57
Show file tree
Hide file tree
Showing 4 changed files with 65 additions and 35 deletions.
15 changes: 1 addition & 14 deletions Rhino.ServiceBus.Castle/CastleBootStrapper.cs
Expand Up @@ -78,20 +78,7 @@ protected virtual void ConfigureContainer()


protected virtual void RegisterConsumersFrom(Assembly assembly) protected virtual void RegisterConsumersFrom(Assembly assembly)
{ {
container.Register( container.RegisterConsumersFrom(assembly, ConfigureConsumer);
AllTypes
.FromAssembly(assembly)
.Where(type =>
typeof(IMessageConsumer).IsAssignableFrom(type) &&
!typeof(IOccasionalMessageConsumer).IsAssignableFrom(type) &&
IsTypeAcceptableForThisBootStrapper(type)
)
.Configure(registration =>
{
registration.LifeStyle.Is(LifestyleType.Transient);
ConfigureConsumer(registration);
})
);
} }


protected virtual void ConfigureConsumer(ComponentRegistration registration) protected virtual void ConfigureConsumer(ComponentRegistration registration)
Expand Down
61 changes: 42 additions & 19 deletions Rhino.ServiceBus.Castle/Extensions.cs
@@ -1,20 +1,43 @@
using Castle.Windsor; using Castle.Windsor;
using Rhino.ServiceBus.Castle; using Rhino.ServiceBus.Castle;
using Rhino.ServiceBus.Impl; using Rhino.ServiceBus.Impl;


namespace Rhino.ServiceBus namespace Rhino.ServiceBus
{ {
public static class Extensions public static class Extensions
{ {
public static AbstractRhinoServiceBusConfiguration UseCastleWindsor(this AbstractRhinoServiceBusConfiguration configuration) public static AbstractRhinoServiceBusConfiguration UseCastleWindsor(this AbstractRhinoServiceBusConfiguration configuration)
{ {
return UseCastleWindsor(configuration, new WindsorContainer()); return UseCastleWindsor(configuration, new WindsorContainer());
} }


public static AbstractRhinoServiceBusConfiguration UseCastleWindsor(this AbstractRhinoServiceBusConfiguration configuration, IWindsorContainer container) public static AbstractRhinoServiceBusConfiguration UseCastleWindsor(this AbstractRhinoServiceBusConfiguration configuration, IWindsorContainer container)
{ {
new CastleBuilder(container, configuration); new CastleBuilder(container, configuration);
return configuration; return configuration;
} }
}
public static void RegisterConsumersFrom(this IWindsorContainer container, Assembly assembly)
{
RegisterConsumersFrom(container, assembly, x=>x.Named(x.Implementation.FullName));
}

public static void RegisterConsumersFrom(this IWindsorContainer container, Assembly assembly, Action<ComponentRegistration> configureConsumer)
{
container.Register(
AllTypes
.FromAssembly(assembly)
.Where(type =>
typeof(IMessageConsumer).IsAssignableFrom(type) &&
!typeof(IOccasionalMessageConsumer).IsAssignableFrom(type) &&
IsTypeAcceptableForThisBootStrapper(type)
)
.Configure(registration =>
{
registration.LifeStyle.Is(LifestyleType.Transient);
configureConsumer(registration);
})
);
}
}
} }
17 changes: 17 additions & 0 deletions Rhino.ServiceBus.Tests/Hosting/Can_host_in_another_app_domain.cs
Expand Up @@ -31,6 +31,16 @@ public Can_host_in_another_app_domain()
.Configure(); .Configure();
} }


[Fact]
public void Can_use_different_config_correctly()
{
var bootStrapper = new SimpleBootStrapper(windsorContainer);
var differentConfig = new BusConfigurationSection();
bootStrapper.UseConfiguration(differentConfig);
bootStrapper.InitializeContainer();
Assert.AreEqual(differentConfig, bootStrapper.ConfigurationSectionInUse);
}

[Fact] [Fact]
public void Components_are_registered_using_their_full_name() public void Components_are_registered_using_their_full_name()
{ {
Expand Down Expand Up @@ -78,10 +88,17 @@ public void Consume(StringMsg message)


public class SimpleBootStrapper : CastleBootStrapper public class SimpleBootStrapper : CastleBootStrapper
{ {
public BusConfigurationSection ConfigurationSectionInUse {get ; private set;}

public SimpleBootStrapper(IWindsorContainer container) : base(container) public SimpleBootStrapper(IWindsorContainer container) : base(container)
{ {


} }

protected override void ConfigureBusFacility(AbstractRhinoServiceBusConfiguration configuration)
{
ConfigurationSectionInUse = configuration.ConfigurationSection;
}
} }


public class TestBootStrapper : CastleBootStrapper public class TestBootStrapper : CastleBootStrapper
Expand Down
7 changes: 5 additions & 2 deletions Rhino.ServiceBus/Hosting/AbstractBootStrapper.cs
Expand Up @@ -9,6 +9,7 @@ namespace Rhino.ServiceBus.Hosting
public abstract class AbstractBootStrapper : IDisposable public abstract class AbstractBootStrapper : IDisposable
{ {
private AbstractRhinoServiceBusConfiguration config; private AbstractRhinoServiceBusConfiguration config;
private BusConfigurationSection busSection;


public virtual IEnumerable<Assembly> Assemblies public virtual IEnumerable<Assembly> Assemblies
{ {
Expand All @@ -24,7 +25,7 @@ public virtual void InitializeContainer()


public virtual void UseConfiguration(BusConfigurationSection configurationSection) public virtual void UseConfiguration(BusConfigurationSection configurationSection)
{ {
config.UseConfiguration(configurationSection); busSection = configurationSection;
} }


public abstract void CreateContainer(); public abstract void CreateContainer();
Expand All @@ -42,7 +43,9 @@ protected virtual bool IsTypeAcceptableForThisBootStrapper(Type t)


protected virtual AbstractRhinoServiceBusConfiguration CreateConfiguration() protected virtual AbstractRhinoServiceBusConfiguration CreateConfiguration()
{ {
return new RhinoServiceBusConfiguration(); var cfg = new RhinoServiceBusConfiguration();
if (busSection!=null) config.UseConfiguration(configurationSection);
return cfg;
} }


protected virtual void ConfigureBusFacility(AbstractRhinoServiceBusConfiguration configuration) protected virtual void ConfigureBusFacility(AbstractRhinoServiceBusConfiguration configuration)
Expand Down

0 comments on commit 214bc57

Please sign in to comment.