From 9e7627521f5c8bb1d43b67ba28c76568ef4c78bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andreas=20=C3=96hlund?= Date: Thu, 25 Sep 2014 11:02:19 +0200 Subject: [PATCH] Making the ctor of the definition public --- .../NServiceBus.SqlServer.csproj | 2 +- src/NServiceBus.SqlServer/SqlServer.cs | 29 ----- .../SqlServerSettingsExtensions.cs | 4 +- .../SqlServerTransport.cs | 104 +++--------------- .../SqlServerTransportFeature.cs | 97 ++++++++++++++++ 5 files changed, 118 insertions(+), 118 deletions(-) delete mode 100644 src/NServiceBus.SqlServer/SqlServer.cs create mode 100644 src/NServiceBus.SqlServer/SqlServerTransportFeature.cs diff --git a/src/NServiceBus.SqlServer/NServiceBus.SqlServer.csproj b/src/NServiceBus.SqlServer/NServiceBus.SqlServer.csproj index 32cd13cb1..9764d0a90 100644 --- a/src/NServiceBus.SqlServer/NServiceBus.SqlServer.csproj +++ b/src/NServiceBus.SqlServer/NServiceBus.SqlServer.csproj @@ -71,8 +71,8 @@ - + diff --git a/src/NServiceBus.SqlServer/SqlServer.cs b/src/NServiceBus.SqlServer/SqlServer.cs deleted file mode 100644 index e2e5f64a1..000000000 --- a/src/NServiceBus.SqlServer/SqlServer.cs +++ /dev/null @@ -1,29 +0,0 @@ -namespace NServiceBus -{ - using Configuration.AdvanceExtensibility; - using Features; - using Transports; - - /// - /// SqlServer Transport - /// - public class SqlServerTransport : TransportDefinition - { - internal SqlServerTransport() - { - RequireOutboxConsent = true; - } - - /// - /// Gives implementations access to the instance at configuration time. - /// - protected override void Configure(BusConfiguration config) - { - config.EnableFeature(); - config.EnableFeature(); - config.EnableFeature(); - config.GetSettings().EnableFeatureByDefault(); - config.GetSettings().EnableFeatureByDefault(); - } - } -} \ No newline at end of file diff --git a/src/NServiceBus.SqlServer/SqlServerSettingsExtensions.cs b/src/NServiceBus.SqlServer/SqlServerSettingsExtensions.cs index 27c35e64c..727e6801d 100644 --- a/src/NServiceBus.SqlServer/SqlServerSettingsExtensions.cs +++ b/src/NServiceBus.SqlServer/SqlServerSettingsExtensions.cs @@ -15,7 +15,7 @@ public static class SqlServerSettingsExtensions /// public static TransportExtensions DisableCallbackReceiver(this TransportExtensions transportExtensions) { - transportExtensions.GetSettings().Set(Features.SqlServerTransport.UseCallbackReceiverSettingKey, false); + transportExtensions.GetSettings().Set(Features.SqlServerTransportFeature.UseCallbackReceiverSettingKey, false); return transportExtensions; } @@ -32,7 +32,7 @@ public static TransportExtensions CallbackReceiverMaxConcurr { throw new ArgumentException("Maximum concurrency value must be greater than zero.","maxConcurrency"); } - transportExtensions.GetSettings().Set(Features.SqlServerTransport.MaxConcurrencyForCallbackReceiverSettingKey, maxConcurrency); + transportExtensions.GetSettings().Set(Features.SqlServerTransportFeature.MaxConcurrencyForCallbackReceiverSettingKey, maxConcurrency); return transportExtensions; } } diff --git a/src/NServiceBus.SqlServer/SqlServerTransport.cs b/src/NServiceBus.SqlServer/SqlServerTransport.cs index a2565f421..24ec2a9bc 100644 --- a/src/NServiceBus.SqlServer/SqlServerTransport.cs +++ b/src/NServiceBus.SqlServer/SqlServerTransport.cs @@ -1,100 +1,32 @@ -namespace NServiceBus.Features +namespace NServiceBus { - using System; - using System.Linq; - using Pipeline; - using Settings; - using Support; + using Configuration.AdvanceExtensibility; + using Features; using Transports; - using Transports.SQLServer; - using System.Configuration; /// - /// Configures NServiceBus to use SqlServer as the default transport + /// SqlServer Transport /// - class SqlServerTransport : ConfigureTransport + public class SqlServerTransport : TransportDefinition { - public const string UseCallbackReceiverSettingKey = "SqlServer.UseCallbackReceiver"; - public const string MaxConcurrencyForCallbackReceiverSettingKey = "SqlServer.MaxConcurrencyForCallbackReceiver"; - + /// + /// Ctor + /// public SqlServerTransport() { - Defaults(s => - { - s.SetDefault(UseCallbackReceiverSettingKey, true); - s.SetDefault(MaxConcurrencyForCallbackReceiverSettingKey, 1); - }); - } - - protected override string ExampleConnectionStringForErrorMessage - { - get { return @"Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True"; } - } - - protected override string GetLocalAddress(ReadOnlySettings settings) - { - return settings.EndpointName(); + RequireOutboxConsent = true; } - protected override void Configure(FeatureConfigurationContext context, string connectionString) + /// + /// Gives implementations access to the instance at configuration time. + /// + protected override void Configure(BusConfiguration config) { - //Until we refactor the whole address system - Address.IgnoreMachineName(); - - var useCallbackReceiver = context.Settings.Get(UseCallbackReceiverSettingKey); - var maxConcurrencyForCallbackReceiver = context.Settings.Get(MaxConcurrencyForCallbackReceiverSettingKey); - - var queueName = GetLocalAddress(context.Settings); - var callbackQueue = string.Format("{0}.{1}", queueName, RuntimeEnvironment.MachineName); - - //Load all connectionstrings - var collection = - ConfigurationManager - .ConnectionStrings - .Cast() - .Where(x => x.Name.StartsWith("NServiceBus/Transport/")) - .ToDictionary(x => x.Name.Replace("NServiceBus/Transport/", String.Empty), y => y.ConnectionString); - - if (String.IsNullOrEmpty(connectionString)) - { - throw new ArgumentException("Sql Transport connection string cannot be empty or null."); - } - - var container = context.Container; - - container.ConfigureComponent(DependencyLifecycle.InstancePerCall) - .ConfigureProperty(p => p.ConnectionString, connectionString); - - container.ConfigureComponent(DependencyLifecycle.InstancePerCall) - .ConfigureProperty(p => p.DefaultConnectionString, connectionString) - .ConfigureProperty(p => p.ConnectionStringCollection, collection) - .ConfigureProperty(p => p.CallbackQueue, callbackQueue); - - container.ConfigureComponent(DependencyLifecycle.InstancePerCall) - .ConfigureProperty(p => p.ConnectionString, connectionString); - - context.Container.ConfigureComponent(b => new SqlServerStorageContext(b.Build(), connectionString), DependencyLifecycle.InstancePerUnitOfWork); - - if (useCallbackReceiver) - { - var callbackAddress = Address.Parse(callbackQueue); - - context.Container.ConfigureComponent(DependencyLifecycle.InstancePerCall) - .ConfigureProperty(p => p.Enabled, true) - .ConfigureProperty(p => p.CallbackQueueAddress, callbackAddress); - - context.Pipeline.Register(); - } - context.Container.RegisterSingleton(new SecondaryReceiveConfiguration(workQueue => - { - //if this isn't the main queue we shouldn't use callback receiver - if (!useCallbackReceiver || workQueue != queueName) - { - return SecondaryReceiveSettings.Disabled(); - } - - return SecondaryReceiveSettings.Enabled(callbackQueue, maxConcurrencyForCallbackReceiver); - })); + config.EnableFeature(); + config.EnableFeature(); + config.EnableFeature(); + config.GetSettings().EnableFeatureByDefault(); + config.GetSettings().EnableFeatureByDefault(); } } } \ No newline at end of file diff --git a/src/NServiceBus.SqlServer/SqlServerTransportFeature.cs b/src/NServiceBus.SqlServer/SqlServerTransportFeature.cs new file mode 100644 index 000000000..5877be96b --- /dev/null +++ b/src/NServiceBus.SqlServer/SqlServerTransportFeature.cs @@ -0,0 +1,97 @@ +namespace NServiceBus.Features +{ + using System; + using System.Linq; + using Pipeline; + using Settings; + using Support; + using Transports; + using Transports.SQLServer; + using System.Configuration; + + class SqlServerTransportFeature : ConfigureTransport + { + public const string UseCallbackReceiverSettingKey = "SqlServer.UseCallbackReceiver"; + public const string MaxConcurrencyForCallbackReceiverSettingKey = "SqlServer.MaxConcurrencyForCallbackReceiver"; + + public SqlServerTransportFeature() + { + Defaults(s => + { + s.SetDefault(UseCallbackReceiverSettingKey, true); + s.SetDefault(MaxConcurrencyForCallbackReceiverSettingKey, 1); + }); + } + + protected override string ExampleConnectionStringForErrorMessage + { + get { return @"Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True"; } + } + + protected override string GetLocalAddress(ReadOnlySettings settings) + { + return settings.EndpointName(); + } + + protected override void Configure(FeatureConfigurationContext context, string connectionString) + { + //Until we refactor the whole address system + Address.IgnoreMachineName(); + + var useCallbackReceiver = context.Settings.Get(UseCallbackReceiverSettingKey); + var maxConcurrencyForCallbackReceiver = context.Settings.Get(MaxConcurrencyForCallbackReceiverSettingKey); + + var queueName = GetLocalAddress(context.Settings); + var callbackQueue = string.Format("{0}.{1}", queueName, RuntimeEnvironment.MachineName); + + //Load all connectionstrings + var collection = + ConfigurationManager + .ConnectionStrings + .Cast() + .Where(x => x.Name.StartsWith("NServiceBus/Transport/")) + .ToDictionary(x => x.Name.Replace("NServiceBus/Transport/", String.Empty), y => y.ConnectionString); + + if (String.IsNullOrEmpty(connectionString)) + { + throw new ArgumentException("Sql Transport connection string cannot be empty or null."); + } + + var container = context.Container; + + container.ConfigureComponent(DependencyLifecycle.InstancePerCall) + .ConfigureProperty(p => p.ConnectionString, connectionString); + + container.ConfigureComponent(DependencyLifecycle.InstancePerCall) + .ConfigureProperty(p => p.DefaultConnectionString, connectionString) + .ConfigureProperty(p => p.ConnectionStringCollection, collection) + .ConfigureProperty(p => p.CallbackQueue, callbackQueue); + + container.ConfigureComponent(DependencyLifecycle.InstancePerCall) + .ConfigureProperty(p => p.ConnectionString, connectionString); + + context.Container.ConfigureComponent(b => new SqlServerStorageContext(b.Build(), connectionString), DependencyLifecycle.InstancePerUnitOfWork); + + if (useCallbackReceiver) + { + var callbackAddress = Address.Parse(callbackQueue); + + context.Container.ConfigureComponent(DependencyLifecycle.InstancePerCall) + .ConfigureProperty(p => p.Enabled, true) + .ConfigureProperty(p => p.CallbackQueueAddress, callbackAddress); + + context.Pipeline.Register(); + } + context.Container.RegisterSingleton(new SecondaryReceiveConfiguration(workQueue => + { + //if this isn't the main queue we shouldn't use callback receiver + if (!useCallbackReceiver || workQueue != queueName) + { + return SecondaryReceiveSettings.Disabled(); + } + + return SecondaryReceiveSettings.Enabled(callbackQueue, maxConcurrencyForCallbackReceiver); + })); + } + } +} \ No newline at end of file