diff --git a/docs/Builder.md b/docs/Builder.md new file mode 100644 index 0000000..38d8f9a --- /dev/null +++ b/docs/Builder.md @@ -0,0 +1,29 @@ +# The QuidjiboBuilder + +## Overview +All of the components can be wired up from your favorite DI framework, but that can be a bit much. So we have a builder to help simplify the basics. The builder also allows for extension methods to be added by other integrations. + +## Anatomy Of the Builder +For the most part the build is a handful of Configure methods that create the basic infrastructure. When using specific integrations such as SQL Server, or Amazon SQS, you want to tell Quidjibo about those things. Typically your use of the builder should be restricted to using the extension methods provided by the specific integration. If you are adding an integration then you most likely will be leveraging those Configure methods while building your custom extensions. + +## Building A Server +The builder has a BuildServer() method that will assemble all of the configurations that you need. This method only creates and instance of the QuidjiboServer, you will need to Start(), and Stop() the server yourself. Start and stop can be done manually or if you are using aspnetcore pipeline you can tie into that process, which has a supported integration too. + +## Building A Client +The client is how you queue jobs, and schedule work. Using the same builder you used for building your server you can call the BuildClient(). Building the client will create a singleton of your configured client. You can then leverage the QuidjiboClient.Instance to queue, and schedule work. + +But I don't like statics it makes my code hard to test. In that case you can use IQuidjiboClient and inject that into your constructors. Checkout the DI integrations so that the client resolves correctly. + +## Building Multiple Server +Each server runs a single configuration. There may be times when you need to work with multiple types of infrastructures for different parts of your application. This use case is handled by creating two or more builders, configuring them as needed, then starting, and stopping them as needed. + +## Building Multiple Clients +Building muliple clients is supported too. However your static is slightly different. Using some generics we can get there but it is a little more work. First we need to create a key to diffentiate each client. + +```C# +public class MyClientKey1 : IQuidjiboClientKey{} +public class MyClientKey2 : IQuidjiboClientKey{} +``` + +We can use these keys to create distinct clients using the BuildClient() called on our first builder, and on the second builder BuildClient(). Now we can use QuidjiboClient.Instance or QuidjiboClient.Instance. Each one is a distinct configuration. For DI we can inject IQuidjiboClient or IQuidjiboClient into our constructor. + diff --git a/docs/CreatingJobs.md b/docs/CreatingJobs.md new file mode 100644 index 0000000..ce9ba8e --- /dev/null +++ b/docs/CreatingJobs.md @@ -0,0 +1,2 @@ +# Quidjibo +A task worker library for .NET with an async pipeline. diff --git a/docs/DepedencyInjection.md b/docs/DepedencyInjection.md new file mode 100644 index 0000000..ce9ba8e --- /dev/null +++ b/docs/DepedencyInjection.md @@ -0,0 +1,2 @@ +# Quidjibo +A task worker library for .NET with an async pipeline. diff --git a/src/Quidjibo.Autofac.Tests/Samples/BasicCommand.cs b/src/Quidjibo.Autofac.Tests/Samples/BasicCommand.cs index a55f4ad..4d23e10 100644 --- a/src/Quidjibo.Autofac.Tests/Samples/BasicCommand.cs +++ b/src/Quidjibo.Autofac.Tests/Samples/BasicCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.Autofac.Tests.Samples { - public class BasicCommand : IQuidjiboCommand - { - } + public class BasicCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.Autofac.Tests/Samples/SimpleJob.cs b/src/Quidjibo.Autofac.Tests/Samples/SimpleJob.cs index cc5dd66..9d51473 100644 --- a/src/Quidjibo.Autofac.Tests/Samples/SimpleJob.cs +++ b/src/Quidjibo.Autofac.Tests/Samples/SimpleJob.cs @@ -9,9 +9,7 @@ namespace Quidjibo.Autofac.Tests.Samples { public class SimpleJob { - public class Command : IQuidjiboCommand - { - } + public class Command : IQuidjiboCommand { } public class Handler : IQuidjiboHandler { diff --git a/src/Quidjibo.Autofac.Tests/Samples/UnhandledCommand.cs b/src/Quidjibo.Autofac.Tests/Samples/UnhandledCommand.cs index 7606565..4646f39 100644 --- a/src/Quidjibo.Autofac.Tests/Samples/UnhandledCommand.cs +++ b/src/Quidjibo.Autofac.Tests/Samples/UnhandledCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.Autofac.Tests.Samples { - public class UnhandledCommand : IQuidjiboCommand - { - } + public class UnhandledCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.Aws.Sqs/Providers/SqsWorkProvider.cs b/src/Quidjibo.Aws.Sqs/Providers/SqsWorkProvider.cs index bde43b3..8a77af9 100644 --- a/src/Quidjibo.Aws.Sqs/Providers/SqsWorkProvider.cs +++ b/src/Quidjibo.Aws.Sqs/Providers/SqsWorkProvider.cs @@ -48,9 +48,7 @@ public async Task SendAsync(WorkItem item, int delay, CancellationToken cancella var response = await _client.SendMessageAsync(request, cancellationToken); - if (response.HttpStatusCode == HttpStatusCode.OK) - { - } + if (response.HttpStatusCode == HttpStatusCode.OK) { } } public async Task> ReceiveAsync(string worker, CancellationToken cancellationToken) diff --git a/src/Quidjibo.Azure.ServiceBus/Configurations/ServiceBusQuidjiboConfiguration.cs b/src/Quidjibo.Azure.ServiceBus/Configurations/ServiceBusQuidjiboConfiguration.cs index 914654e..ccc4cfd 100644 --- a/src/Quidjibo.Azure.ServiceBus/Configurations/ServiceBusQuidjiboConfiguration.cs +++ b/src/Quidjibo.Azure.ServiceBus/Configurations/ServiceBusQuidjiboConfiguration.cs @@ -3,7 +3,8 @@ namespace Quidjibo.Azure.ServiceBus.Configurations { - public class ServiceBusQuidjiboConfiguration: IQuidjiboConfiguration { + public class ServiceBusQuidjiboConfiguration : IQuidjiboConfiguration + { public List Queues { get; } public bool SingleLoop { get; } public int PollingInterval { get; } @@ -11,4 +12,4 @@ public class ServiceBusQuidjiboConfiguration: IQuidjiboConfiguration { public int LockInterval { get; } public int Throttle { get; } } -} +} \ No newline at end of file diff --git a/src/Quidjibo.DependencyInjection.Tests/Samples/BasicCommand.cs b/src/Quidjibo.DependencyInjection.Tests/Samples/BasicCommand.cs index 30378e0..d45cd6c 100644 --- a/src/Quidjibo.DependencyInjection.Tests/Samples/BasicCommand.cs +++ b/src/Quidjibo.DependencyInjection.Tests/Samples/BasicCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.DependencyInjection.Tests.Samples { - public class BasicCommand : IQuidjiboCommand - { - } + public class BasicCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.DependencyInjection.Tests/Samples/SimpleJob.cs b/src/Quidjibo.DependencyInjection.Tests/Samples/SimpleJob.cs index 52cfde3..3067ac0 100644 --- a/src/Quidjibo.DependencyInjection.Tests/Samples/SimpleJob.cs +++ b/src/Quidjibo.DependencyInjection.Tests/Samples/SimpleJob.cs @@ -9,9 +9,7 @@ namespace Quidjibo.DependencyInjection.Tests.Samples { public class SimpleJob { - public class Command : IQuidjiboCommand - { - } + public class Command : IQuidjiboCommand { } public class Handler : IQuidjiboHandler { diff --git a/src/Quidjibo.DependencyInjection.Tests/Samples/UnhandledCommand.cs b/src/Quidjibo.DependencyInjection.Tests/Samples/UnhandledCommand.cs index be89aee..c182ccb 100644 --- a/src/Quidjibo.DependencyInjection.Tests/Samples/UnhandledCommand.cs +++ b/src/Quidjibo.DependencyInjection.Tests/Samples/UnhandledCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.DependencyInjection.Tests.Samples { - public class UnhandledCommand : IQuidjiboCommand - { - } + public class UnhandledCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.DependencyInjection/Extensions/ServiceCollectionExtensions.cs b/src/Quidjibo.DependencyInjection/Extensions/ServiceCollectionExtensions.cs index bdef15c..410fff9 100644 --- a/src/Quidjibo.DependencyInjection/Extensions/ServiceCollectionExtensions.cs +++ b/src/Quidjibo.DependencyInjection/Extensions/ServiceCollectionExtensions.cs @@ -21,6 +21,7 @@ where intf.GetTypeInfo().IsGenericType && intf.GetGenericTypeDefinition() == han { serviceCollection.Add(serviceDescriptor); } + serviceCollection.Add(new ServiceDescriptor(typeof(IQuidjiboClient), _ => (IQuidjiboClient)QuidjiboClient.Instance, ServiceLifetime.Singleton)); return serviceCollection; diff --git a/src/Quidjibo.SimpleInjector.Tests/Samples/BasicCommand.cs b/src/Quidjibo.SimpleInjector.Tests/Samples/BasicCommand.cs index 5db6b9a..91be417 100644 --- a/src/Quidjibo.SimpleInjector.Tests/Samples/BasicCommand.cs +++ b/src/Quidjibo.SimpleInjector.Tests/Samples/BasicCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.SimpleInjector.Tests.Samples { - public class BasicCommand : IQuidjiboCommand - { - } + public class BasicCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.SimpleInjector.Tests/Samples/SimpleJob.cs b/src/Quidjibo.SimpleInjector.Tests/Samples/SimpleJob.cs index 494ecbc..1067a3a 100644 --- a/src/Quidjibo.SimpleInjector.Tests/Samples/SimpleJob.cs +++ b/src/Quidjibo.SimpleInjector.Tests/Samples/SimpleJob.cs @@ -9,9 +9,7 @@ namespace Quidjibo.SimpleInjector.Tests.Samples { public class SimpleJob { - public class Command : IQuidjiboCommand - { - } + public class Command : IQuidjiboCommand { } public class Handler : IQuidjiboHandler { diff --git a/src/Quidjibo.SimpleInjector.Tests/Samples/UnhandledCommand.cs b/src/Quidjibo.SimpleInjector.Tests/Samples/UnhandledCommand.cs index 8befbde..3c9fa7b 100644 --- a/src/Quidjibo.SimpleInjector.Tests/Samples/UnhandledCommand.cs +++ b/src/Quidjibo.SimpleInjector.Tests/Samples/UnhandledCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.SimpleInjector.Tests.Samples { - public class UnhandledCommand : IQuidjiboCommand - { - } + public class UnhandledCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.StructureMap.Tests/Samples/BasicCommand.cs b/src/Quidjibo.StructureMap.Tests/Samples/BasicCommand.cs index b693fb5..7e1edea 100644 --- a/src/Quidjibo.StructureMap.Tests/Samples/BasicCommand.cs +++ b/src/Quidjibo.StructureMap.Tests/Samples/BasicCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.StructureMap.Tests.Samples { - public class BasicCommand : IQuidjiboCommand - { - } + public class BasicCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.StructureMap.Tests/Samples/SimpleJob.cs b/src/Quidjibo.StructureMap.Tests/Samples/SimpleJob.cs index 5f7126e..8c9cfb3 100644 --- a/src/Quidjibo.StructureMap.Tests/Samples/SimpleJob.cs +++ b/src/Quidjibo.StructureMap.Tests/Samples/SimpleJob.cs @@ -9,9 +9,7 @@ namespace Quidjibo.StructureMap.Tests.Samples { public class SimpleJob { - public class Command : IQuidjiboCommand - { - } + public class Command : IQuidjiboCommand { } public class Handler : IQuidjiboHandler { diff --git a/src/Quidjibo.StructureMap.Tests/Samples/UnhandledCommand.cs b/src/Quidjibo.StructureMap.Tests/Samples/UnhandledCommand.cs index 3166212..25291e6 100644 --- a/src/Quidjibo.StructureMap.Tests/Samples/UnhandledCommand.cs +++ b/src/Quidjibo.StructureMap.Tests/Samples/UnhandledCommand.cs @@ -2,7 +2,5 @@ namespace Quidjibo.StructureMap.Tests.Samples { - public class UnhandledCommand : IQuidjiboCommand - { - } + public class UnhandledCommand : IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo.Tests/Misc/ProviderCacheKeyTests.cs b/src/Quidjibo.Tests/Misc/ProviderCacheKeyTests.cs index f95725e..f086415 100644 --- a/src/Quidjibo.Tests/Misc/ProviderCacheKeyTests.cs +++ b/src/Quidjibo.Tests/Misc/ProviderCacheKeyTests.cs @@ -39,12 +39,8 @@ public void When_Different_KeyType_And_Different_Name() key2.Should().NotBe(key1); } - public class TestClientKey1 : IQuidjiboClientKey - { - } + public class TestClientKey1 : IQuidjiboClientKey { } - public class TestClientKey2 : IQuidjiboClientKey - { - } + public class TestClientKey2 : IQuidjiboClientKey { } } } \ No newline at end of file diff --git a/src/Quidjibo.Tests/Resolvers/ResolverTests.cs b/src/Quidjibo.Tests/Resolvers/ResolverTests.cs index 6e21042..22ad3d0 100644 --- a/src/Quidjibo.Tests/Resolvers/ResolverTests.cs +++ b/src/Quidjibo.Tests/Resolvers/ResolverTests.cs @@ -6,8 +6,6 @@ namespace Quidjibo.Tests.Resolvers public class ResolverTests { [TestMethod] - public void BasicResolveTest() - { - } + public void BasicResolveTest() { } } } \ No newline at end of file diff --git a/src/Quidjibo/Clients/IQuidjiboClient.cs b/src/Quidjibo/Clients/IQuidjiboClient.cs index 9277ba5..4a0bb41 100644 --- a/src/Quidjibo/Clients/IQuidjiboClient.cs +++ b/src/Quidjibo/Clients/IQuidjiboClient.cs @@ -7,9 +7,7 @@ namespace Quidjibo.Clients { - public interface IQuidjiboClient : IQuidjiboClient - { - } + public interface IQuidjiboClient : IQuidjiboClient { } public interface IQuidjiboClient : IDisposable where TKey : IQuidjiboClientKey diff --git a/src/Quidjibo/Commands/IQuidjiboCommand.cs b/src/Quidjibo/Commands/IQuidjiboCommand.cs index 871ec41..c686ec1 100644 --- a/src/Quidjibo/Commands/IQuidjiboCommand.cs +++ b/src/Quidjibo/Commands/IQuidjiboCommand.cs @@ -1,6 +1,4 @@ namespace Quidjibo.Commands { - public interface IQuidjiboCommand - { - } + public interface IQuidjiboCommand { } } \ No newline at end of file diff --git a/src/Quidjibo/Exceptions/QuidjiboNotInitializedException.cs b/src/Quidjibo/Exceptions/QuidjiboNotInitializedException.cs index e7cc306..5852757 100644 --- a/src/Quidjibo/Exceptions/QuidjiboNotInitializedException.cs +++ b/src/Quidjibo/Exceptions/QuidjiboNotInitializedException.cs @@ -4,8 +4,6 @@ namespace Quidjibo.Exceptions { public class QuidjiboNotInitializedException : Exception { - public QuidjiboNotInitializedException() : base("The QuidjiboClient has not been initialized. This could be a timing issue or the BuildClient method was not invoked.") - { - } + public QuidjiboNotInitializedException() : base("The QuidjiboClient has not been initialized. This could be a timing issue or the BuildClient method was not invoked.") { } } } \ No newline at end of file diff --git a/src/Quidjibo/Misc/DefaultClientKey.cs b/src/Quidjibo/Misc/DefaultClientKey.cs index ead6b44..494a6bf 100644 --- a/src/Quidjibo/Misc/DefaultClientKey.cs +++ b/src/Quidjibo/Misc/DefaultClientKey.cs @@ -1,6 +1,4 @@ namespace Quidjibo.Misc { - public class DefaultClientKey : IQuidjiboClientKey - { - } + public class DefaultClientKey : IQuidjiboClientKey { } } \ No newline at end of file diff --git a/src/Quidjibo/Misc/IQuidjiboClientKey.cs b/src/Quidjibo/Misc/IQuidjiboClientKey.cs index c7754a6..d7455ad 100644 --- a/src/Quidjibo/Misc/IQuidjiboClientKey.cs +++ b/src/Quidjibo/Misc/IQuidjiboClientKey.cs @@ -1,6 +1,4 @@ namespace Quidjibo.Misc { - public interface IQuidjiboClientKey - { - } + public interface IQuidjiboClientKey { } } \ No newline at end of file diff --git a/src/Quidjibo/QuidjiboBuilder.cs b/src/Quidjibo/QuidjiboBuilder.cs index dfcd171..e973061 100644 --- a/src/Quidjibo/QuidjiboBuilder.cs +++ b/src/Quidjibo/QuidjiboBuilder.cs @@ -182,6 +182,7 @@ private void BackFillDefaults() { return; } + _cronProvider = _cronProvider ?? new CronProvider(); _dispatcher = _dispatcher ?? new WorkDispatcher(new PayloadResolver()); _loggerFactory = _loggerFactory ?? new LoggerFactory(); diff --git a/src/Quidjibo/Resolvers/PayloadResolver.cs b/src/Quidjibo/Resolvers/PayloadResolver.cs index b9cdff6..88ad13b 100644 --- a/src/Quidjibo/Resolvers/PayloadResolver.cs +++ b/src/Quidjibo/Resolvers/PayloadResolver.cs @@ -38,9 +38,7 @@ where info.IsAssignableFrom(t.GetTypeInfo()) return Activator.CreateInstance(type); } - public void Dispose() - { - } + public void Dispose() { } public IDisposable Begin() {