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.Bus;
12 : using Cqrs.Events;
13 : using Ninject;
14 : using Ninject.Modules;
15 :
16 : namespace Cqrs.Ninject.Configuration
17 : {
18 : /// <summary>
19 : /// A <see cref="INinjectModule"/> that configures the <see cref="InProcessBus{TAuthenticationToken}"/> as a <see cref="IEventPublisher{TAuthenticationToken}"/> and <see cref="IEventReceiver"/>.
20 : /// </summary>
21 : /// <typeparam name="TAuthenticationToken">The <see cref="Type"/> of the authentication token.</typeparam>
22 : public class InProcessEventBusModule<TAuthenticationToken> : ResolvableModule
23 1 : {
24 : #region Overrides of NinjectModule
25 :
26 : /// <summary>
27 : /// Loads the module into the kernel.
28 : /// </summary>
29 1 : public override void Load()
30 : {
31 : RegisterFactories();
32 : RegisterServices();
33 : RegisterCqrsRequirements();
34 : }
35 :
36 : #endregion
37 :
38 : /// <summary>
39 : /// Register the all factories
40 : /// </summary>
41 1 : public virtual void RegisterFactories()
42 : {
43 : }
44 :
45 : /// <summary>
46 : /// Register the all services
47 : /// </summary>
48 1 : public virtual void RegisterServices()
49 : {
50 : }
51 :
52 : /// <summary>
53 : /// Register the <see cref="IEventPublisher{TAuthenticationToken}"/>, <see cref="IEventReceiver{TAuthenticationToken}"/> and <see cref="IEventHandlerRegistrar"/>.
54 : /// </summary>
55 1 : public virtual void RegisterCqrsRequirements()
56 : {
57 : bool isInProcessBusBound = Kernel.GetBindings(typeof (InProcessBus<TAuthenticationToken>)).Any();
58 : InProcessBus<TAuthenticationToken> inProcessBus;
59 : if (!isInProcessBusBound)
60 : {
61 : inProcessBus = Kernel.Get<InProcessBus<TAuthenticationToken>>();
62 : Bind<InProcessBus<TAuthenticationToken>>()
63 : .ToConstant(inProcessBus)
64 : .InSingletonScope();
65 : }
66 : else
67 : inProcessBus = Kernel.Get<InProcessBus<TAuthenticationToken>>();
68 :
69 : Bind<IEventPublisher<TAuthenticationToken>>()
70 : .ToConstant(inProcessBus)
71 : .InSingletonScope();
72 :
73 : Bind<IEventReceiver<TAuthenticationToken>>()
74 : .ToConstant(inProcessBus)
75 : .InSingletonScope();
76 :
77 : bool isHandlerRegistrationBound = Kernel.GetBindings(typeof(IEventHandlerRegistrar)).Any();
78 : if (!isHandlerRegistrationBound)
79 : {
80 : Bind<IEventHandlerRegistrar>()
81 : .ToConstant(inProcessBus)
82 : .InSingletonScope();
83 : }
84 : }
85 : }
86 : }
|