PageRenderTime 47ms CodeModel.GetById 17ms RepoModel.GetById 0ms app.codeStats 0ms

/Plugins/WebApi4.Components/WebApi4.Components/ServiceLayer/WebApiServiceLayerObjects.cs

http://github.com/kahanu/CondorXE
C# | 620 lines | 538 code | 42 blank | 40 comment | 0 complexity | 440b956dd03ea8100e487fcb23116e13 MD5 | raw file
  1. using System;
  2. using System.Linq;
  3. using Condor.Core;
  4. using Condor.Core.Interfaces;
  5. using MyMeta;
  6. namespace WebApi4.Components.ServiceLayer
  7. {
  8. /// <summary>
  9. /// OBSOLETE!!! This class isn't being used any more in favor of
  10. /// WebApiServiceLayerObjectsForDbContext.
  11. /// </summary>
  12. public class WebApiServiceLayerObjects : RenderBase, IServiceObjects
  13. {
  14. #region ctors
  15. private readonly RequestContext _context;
  16. public WebApiServiceLayerObjects(RequestContext context)
  17. : base(context.Zeus.Output)
  18. {
  19. this._context = context;
  20. }
  21. #endregion
  22. #region IRenderObject Members
  23. public void Render()
  24. {
  25. _context.Dialog.InitDialog(_script.Tables.Count);
  26. _context.FileList.Add("");
  27. //RenderFormatterClass();
  28. //RenderRouteConfigClass();
  29. //RenderGlobalAsaxClass();
  30. RenderUnityWebApiConfigurationClass();
  31. RenderBaseControllerClass();
  32. _context.Dialog.InitDialog(_script.Tables.Count);
  33. _context.FileList.Add("");
  34. _context.FileList.Add("Generated WebApi4 Controller classes: ");
  35. foreach (string tableName in _script.Tables)
  36. {
  37. _context.Dialog.Display("Adding " + tableName + "Controller class");
  38. ITable table = _context.Database.Tables[tableName];
  39. RenderApiControllerClass(table);
  40. }
  41. }
  42. #endregion
  43. #region Private Methods
  44. private void RenderApiControllerClass(ITable table)
  45. {
  46. _hdrUtil.WriteClassHeader(_output);
  47. _output.autoTabLn("using System;");
  48. _output.autoTabLn("using System.Collections.Generic;");
  49. _output.autoTabLn("using System.Linq;");
  50. _output.autoTabLn("using System.Linq.Expressions;");
  51. _output.autoTabLn("");
  52. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  53. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ";");
  54. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  55. _output.autoTabLn("");
  56. _output.autoTabLn("namespace " + _script.Settings.ServiceLayer.ServiceNamespace + ".Controllers");
  57. _output.autoTabLn("{");
  58. _output.tabLevel++;
  59. _output.autoTabLn("/// <summary>");
  60. _output.autoTabLn("/// This is the WebApi controller for the " + StringFormatter.CleanUpClassName(table.Name) + " entity.");
  61. _output.autoTabLn("/// </summary>");
  62. _output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "Controller : BaseController<" + StringFormatter.CleanUpClassName(table.Name) + ">");
  63. _output.autoTabLn("{");
  64. _output.tabLevel++;
  65. _output.autoTabLn("#region ctors");
  66. _output.autoTabLn("private readonly I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + " _" + StringFormatter.CamelCasing(StringFormatter.CleanUpClassName(table.Name)) + _script.Settings.DataOptions.ClassSuffix.Name + ";");
  67. _output.autoTabLn("private readonly IUnitOfWork _unitOfWork;");
  68. _output.autoTabLn("");
  69. _output.autoTabLn("public " + StringFormatter.CleanUpClassName(table.Name) + "Controller(I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + " " + StringFormatter.CamelCasing(StringFormatter.CleanUpClassName(table.Name)) + _script.Settings.DataOptions.ClassSuffix.Name + ", IUnitOfWork unitOfWork) : base(" + StringFormatter.CamelCasing(StringFormatter.CleanUpClassName(table.Name)) + _script.Settings.DataOptions.ClassSuffix.Name + ", unitOfWork)");
  70. _output.autoTabLn("{");
  71. _output.tabLevel++;
  72. _output.autoTabLn("this._unitOfWork = unitOfWork;");
  73. _output.autoTabLn("this._" + StringFormatter.CamelCasing(StringFormatter.CleanUpClassName(table.Name)) + _script.Settings.DataOptions.ClassSuffix.Name + " = " + StringFormatter.CamelCasing(StringFormatter.CleanUpClassName(table.Name)) + _script.Settings.DataOptions.ClassSuffix.Name + ";");
  74. _output.tabLevel--;
  75. _output.autoTabLn("}");
  76. _output.autoTabLn("");
  77. _output.autoTabLn("#endregion");
  78. _output.autoTabLn("");
  79. _output.autoTabLn("#region Custom Actions");
  80. _output.autoTabLn("");
  81. _output.autoTabLn("///// <summary>");
  82. _output.autoTabLn("///// This is a custom action that returns Product by category.");
  83. _output.autoTabLn("///// Check how the route is created in the RouteConfig.cs file in the App_Start folder.");
  84. _output.autoTabLn("///// </summary>");
  85. _output.autoTabLn("///// <param name=\"category\">Category Name</param>");
  86. _output.autoTabLn("///// <returns></returns>");
  87. _output.autoTabLn("//public List<Product> GetProductsByCategory(string category)");
  88. _output.autoTabLn("//{");
  89. _output.autoTabLn("// Expression<Func<Product, bool>> exp = null;");
  90. _output.autoTabLn("// if (!string.IsNullOrEmpty(category))");
  91. _output.autoTabLn("// exp = c => c.Category.CategoryName.ToLower() == category.ToLower();");
  92. _output.autoTabLn("");
  93. _output.autoTabLn("// return _productRepository.Get(exp).ToList();");
  94. _output.autoTabLn("//}");
  95. _output.autoTabLn("");
  96. _output.autoTabLn("///// <summary>");
  97. _output.autoTabLn("///// Get a Product by name. Check the RouteConfig.cs file for routing.");
  98. _output.autoTabLn("///// </summary>");
  99. _output.autoTabLn("///// <param name=\"name\">Product Name</param>");
  100. _output.autoTabLn("///// <returns></returns>");
  101. _output.autoTabLn("//public Product GetProductByName(string name)");
  102. _output.autoTabLn("//{");
  103. _output.autoTabLn("");
  104. _output.autoTabLn("// Product product = _productRepository.Get(p => p.Name.ToLower() == name.ToLower()).SingleOrDefault();");
  105. _output.autoTabLn("// if (product == null)");
  106. _output.autoTabLn("// throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));");
  107. _output.autoTabLn("");
  108. _output.autoTabLn("// return product;");
  109. _output.autoTabLn("//}");
  110. _output.autoTabLn("");
  111. _output.autoTabLn("///// <summary>");
  112. _output.autoTabLn("///// Calculate the tax for a product. (Example PUT method.)");
  113. _output.autoTabLn("///// </summary>");
  114. _output.autoTabLn("///// <param name=\"name\">Product model</param>");
  115. _output.autoTabLn("///// <returns></returns>");
  116. _output.autoTabLn("//[HttpPut]");
  117. _output.autoTabLn("//public Product CalculateTax(Product model)");
  118. _output.autoTabLn("//{");
  119. _output.autoTabLn("// if (ModelState.IsValid)");
  120. _output.autoTabLn("// {");
  121. _output.autoTabLn("// try");
  122. _output.autoTabLn("// {");
  123. _output.autoTabLn("// var tax = model.Amount * _taxRate;");
  124. _output.autoTabLn("// _groupDao.UpdateTax(tax);");
  125. _output.autoTabLn("// _unitOfWork.ActionEntities.Commit();");
  126. _output.autoTabLn("// ");
  127. _output.autoTabLn("// }");
  128. _output.autoTabLn("// catch (Exception)");
  129. _output.autoTabLn("// {");
  130. _output.autoTabLn("// return Request.CreateResponse(HttpStatusCode.NotFound);");
  131. _output.autoTabLn("// }");
  132. _output.autoTabLn("// return Request.CreateResponse(HttpStatusCode.OK, model);");
  133. _output.autoTabLn("// }");
  134. _output.autoTabLn("// else");
  135. _output.autoTabLn("// {");
  136. _output.autoTabLn("// return Request.CreateResponse(HttpStatusCode.BadRequest);");
  137. _output.autoTabLn("// }");
  138. _output.autoTabLn("//}");
  139. _output.autoTabLn("");
  140. _output.autoTabLn("#endregion");
  141. _output.tabLevel--;
  142. _output.autoTabLn("}");
  143. _output.tabLevel--;
  144. _output.autoTabLn("}");
  145. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Controller.cs");
  146. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace + "\\Controllers", StringFormatter.CleanUpClassName(table.Name) + "Controller.cs"), SaveActions.DontOverwrite);
  147. }
  148. private void RenderBaseControllerClass()
  149. {
  150. _hdrUtil.WriteClassHeader(_output);
  151. _output.autoTabLn("using System;");
  152. _output.autoTabLn("using System.Collections.Generic;");
  153. _output.autoTabLn("using System.Linq;");
  154. _output.autoTabLn("using System.Net;");
  155. _output.autoTabLn("using System.Net.Http;");
  156. _output.autoTabLn("using System.Web.Http;");
  157. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  158. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ";");
  159. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Generated;");
  160. _output.autoTabLn("");
  161. _output.autoTabLn("namespace " + _script.Settings.ServiceLayer.ServiceNamespace + ".Controllers");
  162. _output.autoTabLn("{");
  163. _output.tabLevel++;
  164. _output.autoTabLn("/// <summary>");
  165. _output.autoTabLn("/// This is the common base ApiController used for all controllers.");
  166. _output.autoTabLn("/// </summary>");
  167. _output.autoTabLn("/// <typeparam name=\"T\"></typeparam>");
  168. _output.autoTabLn("public class BaseController<T> : ApiController where T : Entity");
  169. _output.autoTabLn("{");
  170. _output.tabLevel++;
  171. _output.autoTabLn("#region ctors");
  172. _output.autoTabLn("private readonly IRepository<T> _repository;");
  173. _output.autoTabLn("private readonly IUnitOfWork _unitOfWork;");
  174. _output.autoTabLn("");
  175. _output.autoTabLn("public BaseController(IRepository<T> repository, IUnitOfWork unitOfWork)");
  176. _output.autoTabLn("{");
  177. _output.tabLevel++;
  178. _output.autoTabLn("this._unitOfWork = unitOfWork;");
  179. _output.autoTabLn("this._repository = repository;");
  180. _output.tabLevel--;
  181. _output.autoTabLn("}");
  182. _output.autoTabLn("");
  183. _output.autoTabLn("#endregion");
  184. _output.autoTabLn("");
  185. _output.autoTabLn("#region Basic CRUD");
  186. _output.autoTabLn("");
  187. _output.autoTabLn("/// <summary>");
  188. _output.autoTabLn("/// Get all the entities in the repository.");
  189. _output.autoTabLn("/// </summary>");
  190. _output.autoTabLn("/// <returns></returns>");
  191. _output.autoTabLn("public IEnumerable<T> Get()");
  192. _output.autoTabLn("{");
  193. _output.tabLevel++;
  194. _output.autoTabLn("return _repository.Get();");
  195. _output.tabLevel--;
  196. _output.autoTabLn("}");
  197. _output.autoTabLn("");
  198. _output.autoTabLn("/// <summary>");
  199. _output.autoTabLn("/// Get the selected entity.");
  200. _output.autoTabLn("/// </summary>");
  201. _output.autoTabLn("/// <param name=\"id\">Id</param>");
  202. _output.autoTabLn("/// <returns></returns>");
  203. _output.autoTabLn("public T Get(int id)");
  204. _output.autoTabLn("{");
  205. _output.tabLevel++;
  206. _output.autoTabLn("T model = _repository.GetById(id);");
  207. _output.autoTabLn("if (model == null)");
  208. _output.tabLevel++;
  209. _output.autoTabLn("throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));");
  210. _output.tabLevel--;
  211. _output.autoTabLn("");
  212. _output.autoTabLn("return model;");
  213. _output.tabLevel--;
  214. _output.autoTabLn("}");
  215. _output.autoTabLn("");
  216. _output.autoTabLn("/// <summary>");
  217. _output.autoTabLn("/// Insert a new model into the repository.");
  218. _output.autoTabLn("/// </summary>");
  219. _output.autoTabLn("/// <param name=\"model\">model</param>");
  220. _output.autoTabLn("/// <returns></returns>");
  221. _output.autoTabLn("public HttpResponseMessage Post(T model)");
  222. _output.autoTabLn("{");
  223. _output.tabLevel++;
  224. _output.autoTabLn("if (ModelState.IsValid)");
  225. _output.autoTabLn("{");
  226. _output.tabLevel++;
  227. _output.autoTabLn("_repository.Insert(model);");
  228. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  229. _output.autoTabLn("");
  230. _output.autoTabLn("var response = Request.CreateResponse(HttpStatusCode.Created, model);");
  231. _output.autoTabLn("response.Headers.Location = new Uri(Url.Link(\"DefaultApi\", new { id = model.Id }));");
  232. _output.autoTabLn("");
  233. _output.autoTabLn("return response;");
  234. _output.tabLevel--;
  235. _output.autoTabLn("}");
  236. _output.autoTabLn("else");
  237. _output.autoTabLn("{");
  238. _output.tabLevel++;
  239. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.BadRequest);");
  240. _output.tabLevel--;
  241. _output.autoTabLn("}");
  242. _output.tabLevel--;
  243. _output.autoTabLn("}");
  244. _output.autoTabLn("");
  245. _output.autoTabLn("/// <summary>");
  246. _output.autoTabLn("/// Update the selected model.");
  247. _output.autoTabLn("/// </summary>");
  248. _output.autoTabLn("/// <param name=\"model\">model</param>");
  249. _output.autoTabLn("/// <returns></returns>");
  250. _output.autoTabLn("public HttpResponseMessage Put(T model)");
  251. _output.autoTabLn("{");
  252. _output.tabLevel++;
  253. _output.autoTabLn("if (ModelState.IsValid)");
  254. _output.autoTabLn("{");
  255. _output.tabLevel++;
  256. _output.autoTabLn("try");
  257. _output.autoTabLn("{");
  258. _output.tabLevel++;
  259. _output.autoTabLn("_repository.Update(model);");
  260. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  261. _output.tabLevel--;
  262. _output.autoTabLn("}");
  263. _output.autoTabLn("catch (Exception)");
  264. _output.autoTabLn("{");
  265. _output.tabLevel++;
  266. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  267. _output.tabLevel--;
  268. _output.autoTabLn("}");
  269. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, model);");
  270. _output.tabLevel--;
  271. _output.autoTabLn("}");
  272. _output.autoTabLn("else");
  273. _output.autoTabLn("{");
  274. _output.tabLevel++;
  275. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.BadRequest);");
  276. _output.tabLevel--;
  277. _output.autoTabLn("}");
  278. _output.tabLevel--;
  279. _output.autoTabLn("}");
  280. _output.autoTabLn("");
  281. _output.autoTabLn("/// <summary>");
  282. _output.autoTabLn("/// Alternate generic Put method with an Id argument.");
  283. _output.autoTabLn("/// </summary>");
  284. _output.autoTabLn("/// <param name=\"id\"></param>");
  285. _output.autoTabLn("/// <param name=\"model\"></param>");
  286. _output.autoTabLn("/// <returns></returns>");
  287. _output.autoTabLn("public HttpResponseMessage Put(int id, T model)");
  288. _output.autoTabLn("{");
  289. _output.tabLevel++;
  290. _output.autoTabLn("if (ModelState.IsValid && id == model.Id)");
  291. _output.autoTabLn("{");
  292. _output.tabLevel++;
  293. _output.autoTabLn("try");
  294. _output.autoTabLn("{");
  295. _output.tabLevel++;
  296. _output.autoTabLn("_repository.Update(model);");
  297. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  298. _output.tabLevel--;
  299. _output.autoTabLn("}");
  300. _output.autoTabLn("catch (Exception)");
  301. _output.autoTabLn("{");
  302. _output.tabLevel++;
  303. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  304. _output.tabLevel--;
  305. _output.autoTabLn("}");
  306. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, model);");
  307. _output.tabLevel--;
  308. _output.autoTabLn("}");
  309. _output.autoTabLn("else");
  310. _output.autoTabLn("{");
  311. _output.tabLevel++;
  312. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.BadRequest);");
  313. _output.tabLevel--;
  314. _output.autoTabLn("}");
  315. _output.tabLevel--;
  316. _output.autoTabLn("}");
  317. _output.autoTabLn("/// <summary>");
  318. _output.autoTabLn("/// Delete the selected model by Id.");
  319. _output.autoTabLn("/// </summary>");
  320. _output.autoTabLn("/// <param name=\"id\">Id</param>");
  321. _output.autoTabLn("/// <returns></returns>");
  322. _output.autoTabLn("public HttpResponseMessage Delete(int id)");
  323. _output.autoTabLn("{");
  324. _output.tabLevel++;
  325. _output.autoTabLn("T model = _repository.GetById(id);");
  326. _output.autoTabLn("return Delete(model);");
  327. _output.tabLevel--;
  328. _output.autoTabLn("}");
  329. _output.autoTabLn("");
  330. _output.autoTabLn("/// <summary>");
  331. _output.autoTabLn("/// Delete the selected model via the model.");
  332. _output.autoTabLn("/// </summary>");
  333. _output.autoTabLn("/// <param name=\"model\"></param>");
  334. _output.autoTabLn("/// <returns></returns>");
  335. _output.autoTabLn("public HttpResponseMessage Delete(T model)");
  336. _output.autoTabLn("{");
  337. _output.tabLevel++;
  338. _output.autoTabLn("T localModel = _repository.GetById(model.Id);");
  339. _output.autoTabLn("if (localModel == null)");
  340. _output.autoTabLn("{");
  341. _output.tabLevel++;
  342. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  343. _output.tabLevel--;
  344. _output.autoTabLn("}");
  345. _output.autoTabLn("");
  346. _output.autoTabLn("try");
  347. _output.autoTabLn("{");
  348. _output.tabLevel++;
  349. _output.autoTabLn("_repository.Delete(localModel);");
  350. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  351. _output.tabLevel--;
  352. _output.autoTabLn("}");
  353. _output.autoTabLn("catch (Exception)");
  354. _output.autoTabLn("{");
  355. _output.tabLevel++;
  356. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  357. _output.tabLevel--;
  358. _output.autoTabLn("}");
  359. _output.autoTabLn("");
  360. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, localModel);");
  361. _output.tabLevel--;
  362. _output.autoTabLn("}");
  363. //_output.autoTabLn("/// <summary>");
  364. //_output.autoTabLn("/// Delete the selected model.");
  365. //_output.autoTabLn("/// </summary>");
  366. //_output.autoTabLn("/// <param name=\"id\">Id</param>");
  367. //_output.autoTabLn("/// <returns></returns>");
  368. //_output.autoTabLn("public HttpResponseMessage Delete(int id)");
  369. //_output.autoTabLn("{");
  370. //_output.tabLevel++;
  371. //_output.autoTabLn("T model = _repository.GetById(id);");
  372. //_output.autoTabLn("if (model == null)");
  373. //_output.autoTabLn("{");
  374. //_output.tabLevel++;
  375. //_output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  376. //_output.tabLevel--;
  377. //_output.autoTabLn("}");
  378. //_output.autoTabLn("");
  379. //_output.autoTabLn("try");
  380. //_output.autoTabLn("{");
  381. //_output.tabLevel++;
  382. //_output.autoTabLn("_repository.Delete(model);");
  383. //_output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  384. //_output.tabLevel--;
  385. //_output.autoTabLn("}");
  386. //_output.autoTabLn("catch (Exception)");
  387. //_output.autoTabLn("{");
  388. //_output.tabLevel++;
  389. //_output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  390. //_output.tabLevel--;
  391. //_output.autoTabLn("}");
  392. //_output.autoTabLn("");
  393. //_output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, model);");
  394. //_output.tabLevel--;
  395. //_output.autoTabLn("}");
  396. _output.autoTabLn("#endregion");
  397. _output.autoTabLn("");
  398. _output.tabLevel--;
  399. _output.autoTabLn("}");
  400. _output.tabLevel--;
  401. _output.autoTabLn("}");
  402. _context.FileList.Add(" BaseController.cs");
  403. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace + "\\Controllers", "BaseController.cs"), SaveActions.Overwrite);
  404. }
  405. private void RenderGlobalAsaxClass()
  406. {
  407. _output.autoTabLn("using System;");
  408. _output.autoTabLn("using System.Linq;");
  409. _output.autoTabLn("using System.Web.Http;");
  410. _output.autoTabLn("using System.Web.Routing;");
  411. _output.autoTabLn("using " + _script.Settings.ServiceLayer.ServiceNamespace + ".App_Start;");
  412. _output.autoTabLn("");
  413. _output.autoTabLn("namespace " + _script.Settings.ServiceLayer.ServiceNamespace);
  414. _output.autoTabLn("{");
  415. _output.tabLevel++;
  416. _output.autoTabLn("public class Global : System.Web.HttpApplication");
  417. _output.autoTabLn("{");
  418. _output.autoTabLn("");
  419. _output.tabLevel++;
  420. _output.autoTabLn("protected void Application_Start(object sender, EventArgs e)");
  421. _output.autoTabLn("{");
  422. _output.tabLevel++;
  423. _output.autoTabLn("RouteConfig.RegisterRoutes(RouteTable.Routes);");
  424. _output.autoTabLn("FormattersConfig.RegisterFormatters(GlobalConfiguration.Configuration);");
  425. _output.tabLevel--;
  426. _output.autoTabLn("}");
  427. _output.tabLevel--;
  428. _output.autoTabLn("}");
  429. _output.tabLevel--;
  430. _output.autoTabLn("}");
  431. _context.FileList.Add(" Global.asax.cs");
  432. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace, "Global.asax.cs"), SaveActions.DontOverwrite);
  433. _output.writeln("<%@ Application Codebehind=\"Global.asax.cs\" Inherits=\"" + _script.Settings.ServiceLayer.ServiceNamespace + ".Global\" Language=\"C#\" %>");
  434. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace, "Global.asax"), SaveActions.DontOverwrite);
  435. }
  436. private void RenderUnityWebApiConfigurationClass()
  437. {
  438. _hdrUtil.WriteClassHeader(_output);
  439. _output.autoTabLn("[assembly: WebActivator.PreApplicationStartMethod(typeof(" + _script.Settings.ServiceLayer.ServiceNamespace + ".App_Start.UnityWebApi), \"Start\")]");
  440. _output.autoTabLn("[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(" + _script.Settings.ServiceLayer.ServiceNamespace + ".App_Start.UnityWebApi), \"Stop\")]");
  441. _output.autoTabLn("");
  442. _output.autoTabLn("");
  443. _output.autoTabLn("namespace " + _script.Settings.ServiceLayer.ServiceNamespace + ".App_Start");
  444. _output.autoTabLn("{");
  445. _output.tabLevel++;
  446. _output.autoTabLn("using System;");
  447. _output.autoTabLn("using System.Linq;");
  448. _output.autoTabLn("using System.Web.Http;");
  449. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ";");
  450. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  451. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Repositories;");
  452. _output.autoTabLn("using Microsoft.Practices.Unity;");
  453. _output.autoTabLn("");
  454. _output.autoTabLn("public static class UnityWebApi");
  455. _output.autoTabLn("{");
  456. _output.tabLevel++;
  457. _output.autoTabLn("private static IUnityContainer container;");
  458. _output.autoTabLn("");
  459. _output.autoTabLn("#region Public Methods");
  460. _output.autoTabLn("public static void Start()");
  461. _output.autoTabLn("{");
  462. _output.tabLevel++;
  463. _output.autoTabLn("Initialise();");
  464. _output.tabLevel--;
  465. _output.autoTabLn("}");
  466. _output.autoTabLn("");
  467. _output.autoTabLn("public static void Stop()");
  468. _output.autoTabLn("{");
  469. _output.autoTabLn("");
  470. _output.autoTabLn("} ");
  471. _output.autoTabLn("#endregion");
  472. _output.autoTabLn("");
  473. _output.autoTabLn("#region Private Methods");
  474. _output.autoTabLn("private static void Initialise()");
  475. _output.autoTabLn("{");
  476. _output.tabLevel++;
  477. _output.autoTabLn("container = BuildUnityContainer();");
  478. _output.autoTabLn("");
  479. _output.autoTabLn("GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);");
  480. _output.tabLevel--;
  481. _output.autoTabLn("}");
  482. _output.autoTabLn("");
  483. _output.autoTabLn("private static IUnityContainer BuildUnityContainer()");
  484. _output.autoTabLn("{");
  485. _output.tabLevel++;
  486. _output.autoTabLn("var container = new UnityContainer();");
  487. _output.autoTabLn("");
  488. foreach (string tableName in _script.Tables)
  489. {
  490. ITable table = _context.Database.Tables[tableName];
  491. _output.autoTabLn("container.RegisterType<I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ", " + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ">();");
  492. }
  493. _output.autoTabLn("container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());");
  494. _output.autoTabLn("");
  495. _output.autoTabLn("return container;");
  496. _output.tabLevel--;
  497. _output.autoTabLn("} ");
  498. _output.autoTabLn("#endregion");
  499. _output.tabLevel--;
  500. _output.autoTabLn("}");
  501. _output.tabLevel--;
  502. _output.autoTabLn("}");
  503. _context.FileList.Add(" UnityWebApi.cs");
  504. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace + "\\App_Start", "UnityWebApi.cs"), SaveActions.Overwrite);
  505. }
  506. private void RenderRouteConfigClass()
  507. {
  508. _hdrUtil.WriteClassHeader(_output);
  509. _output.autoTabLn("using System;");
  510. _output.autoTabLn("using System.Linq;");
  511. _output.autoTabLn("using System.Web.Http;");
  512. _output.autoTabLn("using System.Web.Routing;");
  513. _output.autoTabLn("");
  514. _output.autoTabLn("namespace " + _script.Settings.ServiceLayer.ServiceNamespace + ".App_Start");
  515. _output.autoTabLn("{");
  516. _output.tabLevel++;
  517. _output.autoTabLn("/// <summary>");
  518. _output.autoTabLn("/// Register your routes here.");
  519. _output.autoTabLn("/// </summary>");
  520. _output.autoTabLn("public class RouteConfig");
  521. _output.autoTabLn("{");
  522. _output.tabLevel++;
  523. _output.autoTabLn("public static void RegisterRoutes(RouteCollection routes)");
  524. _output.autoTabLn("{");
  525. _output.autoTabLn("");
  526. _output.tabLevel++;
  527. _output.autoTabLn("// This is the default route.");
  528. _output.autoTabLn("routes.MapHttpRoute(");
  529. _output.tabLevel++;
  530. _output.autoTabLn("name: \"DefaultApi\",");
  531. _output.autoTabLn("routeTemplate: \"api/{controller}/{id}\",");
  532. _output.autoTabLn("defaults: new { id = RouteParameter.Optional }");
  533. _output.tabLevel--;
  534. _output.autoTabLn(");");
  535. _output.autoTabLn("");
  536. _output.tabLevel--;
  537. _output.autoTabLn("}");
  538. _output.tabLevel--;
  539. _output.autoTabLn("}");
  540. _output.tabLevel--;
  541. _output.autoTabLn("}");
  542. _context.FileList.Add(" RouteConfig.cs");
  543. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace + "\\App_Start", "RouteConfig.cs"), SaveActions.DontOverwrite);
  544. }
  545. private void RenderFormatterClass()
  546. {
  547. _hdrUtil.WriteClassHeader(_output);
  548. _output.autoTabLn("using System;");
  549. _output.autoTabLn("using System.Linq;");
  550. _output.autoTabLn("using System.Web.Http;");
  551. _output.autoTabLn("using WebApiContrib.Formatting.Jsonp;");
  552. _output.autoTabLn("");
  553. _output.autoTabLn("namespace " + _script.Settings.ServiceLayer.ServiceNamespace + ".App_Start");
  554. _output.autoTabLn("{");
  555. _output.tabLevel++;
  556. _output.autoTabLn("/// <summary>");
  557. _output.autoTabLn("/// Register your formatters here.");
  558. _output.autoTabLn("/// For the Jsonp formatter, install the NuGet package: install-package WebApiContrib.Formatting.Jsonp");
  559. _output.autoTabLn("/// </summary>");
  560. _output.autoTabLn("public class FormattersConfig");
  561. _output.autoTabLn("{");
  562. _output.tabLevel++;
  563. _output.autoTabLn("public static void RegisterFormatters(HttpConfiguration config)");
  564. _output.autoTabLn("{");
  565. _output.tabLevel++;
  566. _output.autoTabLn("config.Formatters.Insert(0, new JsonpMediaTypeFormatter());");
  567. _output.tabLevel--;
  568. _output.autoTabLn("}");
  569. _output.tabLevel--;
  570. _output.autoTabLn("}");
  571. _output.tabLevel--;
  572. _output.autoTabLn("}");
  573. _context.FileList.Add(" FormattersConfig.cs");
  574. SaveOutput(CreateFullPath(_script.Settings.ServiceLayer.ServiceNamespace + "\\App_Start", "FormattersConfig.cs"), SaveActions.DontOverwrite);
  575. }
  576. #endregion
  577. }
  578. }