Line data Source code
1 : using System;
2 : using System.Linq;
3 : using cdmdotnet.AutoMapper;
4 : using Cqrs.Authentication;
5 : using Cqrs.Bus;
6 : using Cqrs.Domain;
7 : using Cqrs.Domain.Factories;
8 : using cdmdotnet.Logging;
9 : using cdmdotnet.Logging.Configuration;
10 : using cdmdotnet.StateManagement;
11 : using cdmdotnet.StateManagement.Threaded;
12 : using cdmdotnet.StateManagement.Web;
13 : using Cqrs.Repositories.Queries;
14 : using Ninject.Modules;
15 : using Ninject.Parameters;
16 :
17 : namespace Cqrs.Ninject.Configuration
18 : {
19 : /// <summary>
20 : /// The <see cref="INinjectModule"/> for use with the Cqrs package.
21 : /// </summary>
22 : public class CqrsModule<TAuthenticationToken, TAuthenticationTokenHelper> : NinjectModule
23 : where TAuthenticationTokenHelper : class, IAuthenticationTokenHelper<TAuthenticationToken>
24 1 : {
25 : protected bool SetupForWeb { get; private set; }
26 :
27 : protected bool SetupForSqlLogging { get; private set; }
28 :
29 : /// <param name="setupForWeb">Set this to true if you will host this in IIS or some other web-server that provides access to System.Web.HttpContext.Current</param>
30 : /// <param name="setupForSqlLogging">Set this to true to use <see cref="SqlLogger"/> otherwise the <see cref="ConsoleLogger"/> will be bootstrapped by default.</param>
31 1 : public CqrsModule(bool setupForWeb, bool setupForSqlLogging)
32 : {
33 : SetupForWeb = setupForWeb;
34 : SetupForSqlLogging = setupForSqlLogging;
35 : }
36 :
37 : #region Overrides of NinjectModule
38 :
39 : /// <summary>
40 : /// Loads the module into the kernel.
41 : /// </summary>
42 1 : public override void Load()
43 : {
44 : RegisterFactories();
45 : RegisterRepositories();
46 : RegisterQueryBuilders();
47 : RegisterServices();
48 : RegisterCqrsRequirements();
49 : RegisterAutomapperComponents();
50 : RegisterLoggerComponents();
51 : RegisterCaching();
52 : }
53 :
54 : #endregion
55 :
56 : /// <summary>
57 : /// Register the all factories
58 : /// </summary>
59 1 : public virtual void RegisterFactories()
60 : {
61 : Bind<IQueryFactory>()
62 : .To<QueryFactory>()
63 : .InSingletonScope();
64 : }
65 :
66 : /// <summary>
67 : /// Register the all components for the <see cref="ILogger"/>
68 : /// </summary>
69 1 : public virtual void RegisterLoggerComponents()
70 : {
71 : bool isCorrelationIdHelperBound = Kernel.GetBindings(typeof(ICorrelationIdHelper)).Any();
72 : if (!isCorrelationIdHelperBound)
73 : {
74 : if (SetupForWeb)
75 : Bind<ICorrelationIdHelper>()
76 : .To<WebCorrelationIdHelper>()
77 : .InSingletonScope();
78 : else
79 : Bind<ICorrelationIdHelper>()
80 : .To<CorrelationIdHelper>()
81 : .InSingletonScope();
82 : }
83 :
84 : bool isLoggerBound = Kernel.GetBindings(typeof(ILogger)).Any();
85 : if (!isLoggerBound)
86 : {
87 : if (SetupForSqlLogging)
88 : Bind<ILogger>()
89 : .To<SqlLogger>()
90 : .InSingletonScope();
91 : else
92 : Bind<ILogger>()
93 : .To<ConsoleLogger>()
94 : .InSingletonScope();
95 : }
96 :
97 : bool isLoggerSettingsBound = Kernel.GetBindings(typeof(ILoggerSettings)).Any();
98 : if (!isLoggerSettingsBound)
99 : {
100 : Bind<ILoggerSettings>()
101 : .To<LoggerSettings>()
102 : .InSingletonScope();
103 : }
104 :
105 : Bind<ITelemetryHelper>()
106 : .To<NullTelemetryHelper>()
107 : .InSingletonScope();
108 : }
109 :
110 : /// <summary>
111 : /// Register the all <see cref="IAutomapHelper"/>
112 : /// </summary>
113 1 : public virtual void RegisterAutomapperComponents()
114 : {
115 : Bind<IAutomapHelper>()
116 : .To<AutomapHelper>()
117 : .InSingletonScope();
118 : }
119 :
120 : /// <summary>
121 : /// Register the all repositories
122 : /// </summary>
123 1 : public virtual void RegisterRepositories()
124 : {
125 : }
126 :
127 : /// <summary>
128 : /// Register the all query builders
129 : /// </summary>
130 1 : public virtual void RegisterQueryBuilders()
131 : {
132 : }
133 :
134 : /// <summary>
135 : /// Register the all services
136 : /// </summary>
137 1 : public virtual void RegisterServices()
138 : {
139 : }
140 :
141 : /// <summary>
142 : /// Register the all caching stuffs
143 : /// </summary>
144 1 : public virtual void RegisterCaching()
145 : {
146 : if (Kernel.GetBindings(typeof (IContextItemCollectionFactory)).Any())
147 : Kernel.Unbind<IContextItemCollectionFactory>();
148 : if (Kernel.GetBindings(typeof(IContextItemCollection)).Any())
149 : Kernel.Unbind<IContextItemCollection>();
150 : if (SetupForWeb)
151 : {
152 : Bind<IContextItemCollectionFactory>()
153 : .To<WebContextItemCollectionFactory>()
154 : .InSingletonScope();
155 : Bind<IContextItemCollection>()
156 : .To<WebContextItemCollection>()
157 : .InSingletonScope();
158 : }
159 : else
160 : {
161 : Bind<IContextItemCollectionFactory>()
162 : .To<ThreadedContextItemCollectionFactory>()
163 : .InSingletonScope();
164 : Bind<IContextItemCollection>()
165 : .To<ThreadedContextItemCollection>()
166 : .InSingletonScope();
167 : }
168 : }
169 :
170 : /// <summary>
171 : /// Register the all Cqrs requirements
172 : /// </summary>
173 1 : public virtual void RegisterCqrsRequirements()
174 : {
175 : Bind<IUnitOfWork<TAuthenticationToken>>()
176 : .To<UnitOfWork<TAuthenticationToken>>()
177 : .InTransientScope();
178 : Bind<IRepository<TAuthenticationToken>>()
179 : .To<Repository<TAuthenticationToken>>()
180 : .InSingletonScope();
181 : Bind<IAggregateFactory>()
182 : .To<AggregateFactory>()
183 : .InSingletonScope();
184 :
185 : Bind<IAuthenticationTokenHelper<TAuthenticationToken>>()
186 : .To<TAuthenticationTokenHelper>()
187 : .InSingletonScope();
188 :
189 : Bind<IStoreLastEventProcessed>()
190 : .To<FileBasedLastEventProcessedStore>()
191 : .InSingletonScope();
192 :
193 : Bind<IBusHelper>()
194 : .To<BusHelper>()
195 : .InSingletonScope();
196 : }
197 :
198 0 : protected T Resolve<T>()
199 : {
200 : return (T)Resolve(typeof(T));
201 : }
202 :
203 0 : protected object Resolve(Type serviceType)
204 : {
205 : return Kernel.Resolve(Kernel.CreateRequest(serviceType, null, new Parameter[0], true, true)).SingleOrDefault();
206 : }
207 : }
208 : }
|