Line data Source code
1 : using System.Linq;
2 : using Cqrs.Azure.ServiceBus;
3 : using Cqrs.Bus;
4 : using Cqrs.Commands;
5 : using Ninject;
6 : using Ninject.Modules;
7 :
8 : namespace Cqrs.Ninject.Azure.ServiceBus.CommandBus.Configuration
9 : {
10 : /// <summary>
11 : /// The <see cref="INinjectModule"/> for use with the Cqrs package.
12 : /// </summary>
13 : public class AzureCommandBusReceiverModule<TAuthenticationToken> : NinjectModule
14 1 : {
15 : #region Overrides of NinjectModule
16 :
17 : /// <summary>
18 : /// Loads the module into the kernel.
19 : /// </summary>
20 1 : public override void Load()
21 : {
22 : bool isMessageSerialiserBound = Kernel.GetBindings(typeof(IAzureBusHelper<TAuthenticationToken>)).Any();
23 : if (!isMessageSerialiserBound)
24 : {
25 : Bind<IAzureBusHelper<TAuthenticationToken>>()
26 : .To<AzureBusHelper<TAuthenticationToken>>()
27 : .InSingletonScope();
28 : }
29 :
30 : RegisterCommandMessageSerialiser();
31 : var bus = GetOrCreateBus<AzureCommandBusReceiver<TAuthenticationToken>>();
32 :
33 : RegisterCommandReceiver(bus);
34 : RegisterCommandHandlerRegistrar(bus);
35 : }
36 :
37 : #endregion
38 :
39 0 : public virtual TBus GetOrCreateBus<TBus>()
40 : where TBus : ICommandReceiver<TAuthenticationToken>, ICommandHandlerRegistrar
41 : {
42 : bool isBusBound = Kernel.GetBindings(typeof(TBus)).Any();
43 : TBus bus;
44 : if (!isBusBound)
45 : {
46 : bus = Kernel.Get<TBus>();
47 : Bind<TBus>()
48 : .ToConstant(bus)
49 : .InSingletonScope();
50 : }
51 : else
52 : bus = Kernel.Get<TBus>();
53 :
54 : return bus;
55 : }
56 :
57 : /// <summary>
58 : /// Register the Cqrs command receiver
59 : /// </summary>
60 1 : public virtual void RegisterCommandReceiver<TBus>(TBus bus)
61 : where TBus : ICommandReceiver<TAuthenticationToken>, ICommandHandlerRegistrar
62 : {
63 : Bind<ICommandReceiver<TAuthenticationToken>>()
64 : .ToConstant(bus)
65 : .InSingletonScope();
66 : }
67 :
68 : /// <summary>
69 : /// Register the Cqrs command handler registrar
70 : /// </summary>
71 1 : public virtual void RegisterCommandHandlerRegistrar<TBus>(TBus bus)
72 : where TBus : ICommandReceiver<TAuthenticationToken>, ICommandHandlerRegistrar
73 : {
74 : Bind<ICommandHandlerRegistrar>()
75 : .ToConstant(bus)
76 : .InSingletonScope();
77 : }
78 :
79 : /// <summary>
80 : /// Register the Cqrs command handler message serialiser
81 : /// </summary>
82 1 : public virtual void RegisterCommandMessageSerialiser()
83 : {
84 : bool isMessageSerialiserBound = Kernel.GetBindings(typeof(IMessageSerialiser<TAuthenticationToken>)).Any();
85 : if (!isMessageSerialiserBound)
86 : {
87 : Bind<IMessageSerialiser<TAuthenticationToken>>()
88 : .To<MessageSerialiser<TAuthenticationToken>>()
89 : .InSingletonScope();
90 : }
91 : }
92 : }
93 : }
|