Line data Source code
1 : #region Copyright
2 : // // -----------------------------------------------------------------------
3 : // // <copyright company="Chinchilla Software Limited">
4 : // // Copyright Chinchilla Software Limited. All rights reserved.
5 : // // </copyright>
6 : // // -----------------------------------------------------------------------
7 : #endregion
8 :
9 : using System;
10 : using System.Linq;
11 : using Cqrs.Azure.ServiceBus;
12 : using Cqrs.Bus;
13 : using Cqrs.Events;
14 : using Ninject;
15 : using Ninject.Modules;
16 :
17 : namespace Cqrs.Ninject.Azure.ServiceBus.EventBus.Configuration
18 : {
19 : /// <summary>
20 : /// A <see cref="INinjectModule"/> that wires up <see cref="AzureEventBusReceiver{TAuthenticationToken}"/> as the <see cref="IEventReceiver"/> and other require components.
21 : /// </summary>
22 : /// <typeparam name="TAuthenticationToken">The <see cref="Type"/> of the authentication token.</typeparam>
23 : public class AzureEventBusReceiverModule<TAuthenticationToken> : NinjectModule
24 1 : {
25 : #region Overrides of NinjectModule
26 :
27 : /// <summary>
28 : /// Loads the module into the kernel.
29 : /// </summary>
30 1 : public override void Load()
31 : {
32 : bool isMessageSerialiserBound = Kernel.GetBindings(typeof(IAzureBusHelper<TAuthenticationToken>)).Any();
33 : if (!isMessageSerialiserBound)
34 : {
35 : Bind<IAzureBusHelper<TAuthenticationToken>>()
36 : .To<AzureBusHelper<TAuthenticationToken>>()
37 : .InSingletonScope();
38 : }
39 :
40 : RegisterEventMessageSerialiser();
41 : var bus = GetOrCreateBus<AzureEventBusReceiver<TAuthenticationToken>>();
42 :
43 : RegisterEventReceiver(bus);
44 : RegisterEventHandlerRegistrar(bus);
45 : }
46 :
47 : #endregion
48 :
49 : /// <summary>
50 : /// Checks if an existing <typeparamref name="TBus"/> has already been registered, if not
51 : /// it tries to instantiates a new instance via resolution and registers that instance.
52 : /// </summary>
53 : /// <typeparam name="TBus">The <see cref="Type"/> of bus to resolve. Best if a class not an interface.</typeparam>
54 1 : public virtual TBus GetOrCreateBus<TBus>()
55 : where TBus : IEventReceiver<TAuthenticationToken>, IEventHandlerRegistrar
56 : {
57 : bool isBusBound = Kernel.GetBindings(typeof(TBus)).Any();
58 : TBus bus;
59 : if (!isBusBound)
60 : {
61 : bus = Kernel.Get<TBus>();
62 : Bind<TBus>()
63 : .ToConstant(bus)
64 : .InSingletonScope();
65 : }
66 : else
67 : bus = Kernel.Get<TBus>();
68 :
69 : return bus;
70 : }
71 :
72 : /// <summary>
73 : /// Register the CQRS event receiver
74 : /// </summary>
75 1 : public virtual void RegisterEventReceiver<TBus>(TBus bus)
76 : where TBus : IEventReceiver<TAuthenticationToken>, IEventHandlerRegistrar
77 : {
78 : Bind<IEventReceiver<TAuthenticationToken>>()
79 : .ToConstant(bus)
80 : .InSingletonScope();
81 : }
82 :
83 : /// <summary>
84 : /// Register the CQRS event handler registrar
85 : /// </summary>
86 1 : public virtual void RegisterEventHandlerRegistrar<TBus>(TBus bus)
87 : where TBus : IEventReceiver<TAuthenticationToken>, IEventHandlerRegistrar
88 : {
89 : bool isHandlerRegistrationBound = Kernel.GetBindings(typeof(IEventHandlerRegistrar)).Any();
90 : if (!isHandlerRegistrationBound)
91 : {
92 : Bind<IEventHandlerRegistrar>()
93 : .ToConstant(bus)
94 : .InSingletonScope();
95 : }
96 : }
97 :
98 : /// <summary>
99 : /// Register the CQRS event handler message serialiser
100 : /// </summary>
101 1 : public virtual void RegisterEventMessageSerialiser()
102 : {
103 : bool isMessageSerialiserBound = Kernel.GetBindings(typeof(IMessageSerialiser<TAuthenticationToken>)).Any();
104 : if (!isMessageSerialiserBound)
105 : {
106 : Bind<IMessageSerialiser<TAuthenticationToken>>()
107 : .To<MessageSerialiser<TAuthenticationToken>>()
108 : .InSingletonScope();
109 : }
110 : }
111 : }
112 : }
|