PageRenderTime 42ms CodeModel.GetById 15ms RepoModel.GetById 1ms app.codeStats 0ms

/Plugins/WebApi4.Components/WebApi4.Components/WebApiBaseClass.cs

http://github.com/kahanu/CondorXE
C# | 477 lines | 438 code | 29 blank | 10 comment | 0 complexity | 59f7c98ef321ed6fcaf28f92d975ab35 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
  7. {
  8. /// <summary>
  9. /// This is a base class so render the WebApi4 controllers and base controller.
  10. /// This is used by both the WebApi4 stand-alone project, and can be used in
  11. /// an ASP.NET MVC 4 application that has WebApi4 capabilities.
  12. /// </summary>
  13. public class WebApiBaseClass : RenderBase, IRenderObject
  14. {
  15. #region ctors
  16. private readonly RequestContext _context;
  17. private readonly string _namespaceName;
  18. /// <summary>
  19. /// A base class for rendering WebApi4 classes to any particular component.
  20. /// </summary>
  21. /// <param name="context">The RequestContext</param>
  22. /// <param name="namespaceName">The name of the component namespace passed in by the derived class, i.e., Services, UI, etc.</param>
  23. public WebApiBaseClass(RequestContext context, string namespaceName) : base(context.Zeus.Output)
  24. {
  25. this._namespaceName = namespaceName;
  26. this._context = context;
  27. }
  28. #endregion
  29. #region Interface Implementations
  30. public void Render()
  31. {
  32. _context.Dialog.InitDialog(_script.Tables.Count);
  33. _context.FileList.Add("");
  34. RenderUnityWebApiConfigurationClass();
  35. RenderBaseControllerClass();
  36. _context.Dialog.InitDialog(_script.Tables.Count);
  37. _context.FileList.Add("");
  38. _context.FileList.Add("Generated WebApi4 Controller classes: ");
  39. foreach (string tableName in _script.Tables)
  40. {
  41. _context.Dialog.Display("Adding " + tableName + "Controller class");
  42. ITable table = _context.Database.Tables[tableName];
  43. RenderApiControllerClass(table);
  44. }
  45. }
  46. #endregion
  47. #region Private Methods
  48. private void RenderApiControllerClass(ITable table)
  49. {
  50. _hdrUtil.WriteClassHeader(_output);
  51. _output.autoTabLn("using System;");
  52. _output.autoTabLn("using System.Collections.Generic;");
  53. _output.autoTabLn("using System.Linq;");
  54. _output.autoTabLn("using System.Linq.Expressions;");
  55. _output.autoTabLn("");
  56. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  57. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ";");
  58. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  59. _output.autoTabLn("");
  60. _output.autoTabLn("namespace " + _namespaceName + ".Controllers");
  61. _output.autoTabLn("{");
  62. _output.tabLevel++;
  63. _output.autoTabLn("/// <summary>");
  64. _output.autoTabLn("/// This is the WebApi controller for the " + StringFormatter.CleanUpClassName(table.Name) + " entity.");
  65. _output.autoTabLn("/// </summary>");
  66. _output.autoTabLn("public class " + StringFormatter.CleanUpClassName(table.Name) + "Controller : BaseController<" + StringFormatter.CleanUpClassName(table.Name) + ">");
  67. _output.autoTabLn("{");
  68. _output.tabLevel++;
  69. _output.autoTabLn("#region ctors");
  70. _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 + ";");
  71. _output.autoTabLn("private readonly IUnitOfWork _unitOfWork;");
  72. _output.autoTabLn("");
  73. _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)");
  74. _output.autoTabLn("{");
  75. _output.tabLevel++;
  76. _output.autoTabLn("this._unitOfWork = unitOfWork;");
  77. _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 + ";");
  78. _output.tabLevel--;
  79. _output.autoTabLn("}");
  80. _output.autoTabLn("");
  81. _output.autoTabLn("#endregion");
  82. _output.autoTabLn("");
  83. _output.autoTabLn("#region Custom Actions");
  84. _output.autoTabLn("");
  85. _output.autoTabLn("///// <summary>");
  86. _output.autoTabLn("///// This is a custom action that returns Product by category.");
  87. _output.autoTabLn("///// Check how the route is created in the RouteConfig.cs file in the App_Start folder.");
  88. _output.autoTabLn("///// </summary>");
  89. _output.autoTabLn("///// <param name=\"category\">Category Name</param>");
  90. _output.autoTabLn("///// <returns></returns>");
  91. _output.autoTabLn("//public List<Product> GetProductsByCategory(string category)");
  92. _output.autoTabLn("//{");
  93. _output.autoTabLn("// Expression<Func<Product, bool>> exp = null;");
  94. _output.autoTabLn("// if (!string.IsNullOrEmpty(category))");
  95. _output.autoTabLn("// exp = c => c.Category.CategoryName.ToLower() == category.ToLower();");
  96. _output.autoTabLn("");
  97. _output.autoTabLn("// return _productRepository.Get(exp).ToList();");
  98. _output.autoTabLn("//}");
  99. _output.autoTabLn("");
  100. _output.autoTabLn("///// <summary>");
  101. _output.autoTabLn("///// Get a Product by name. Check the RouteConfig.cs file for routing.");
  102. _output.autoTabLn("///// </summary>");
  103. _output.autoTabLn("///// <param name=\"name\">Product Name</param>");
  104. _output.autoTabLn("///// <returns></returns>");
  105. _output.autoTabLn("//public Product GetProductByName(string name)");
  106. _output.autoTabLn("//{");
  107. _output.autoTabLn("");
  108. _output.autoTabLn("// Product product = _productRepository.Get(p => p.Name.ToLower() == name.ToLower()).SingleOrDefault();");
  109. _output.autoTabLn("// if (product == null)");
  110. _output.autoTabLn("// throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));");
  111. _output.autoTabLn("");
  112. _output.autoTabLn("// return product;");
  113. _output.autoTabLn("//}");
  114. _output.autoTabLn("");
  115. _output.autoTabLn("///// <summary>");
  116. _output.autoTabLn("///// Calculate the tax for a product. (Example PUT method.)");
  117. _output.autoTabLn("///// </summary>");
  118. _output.autoTabLn("///// <param name=\"name\">Product model</param>");
  119. _output.autoTabLn("///// <returns></returns>");
  120. _output.autoTabLn("//[HttpPut]");
  121. _output.autoTabLn("//public Product CalculateTax(Product model)");
  122. _output.autoTabLn("//{");
  123. _output.autoTabLn("// if (ModelState.IsValid)");
  124. _output.autoTabLn("// {");
  125. _output.autoTabLn("// try");
  126. _output.autoTabLn("// {");
  127. _output.autoTabLn("// var tax = model.Amount * _taxRate;");
  128. _output.autoTabLn("// _groupDao.UpdateTax(tax);");
  129. _output.autoTabLn("// _unitOfWork.ActionEntities.Commit();");
  130. _output.autoTabLn("// ");
  131. _output.autoTabLn("// }");
  132. _output.autoTabLn("// catch (Exception)");
  133. _output.autoTabLn("// {");
  134. _output.autoTabLn("// return Request.CreateResponse(HttpStatusCode.NotFound);");
  135. _output.autoTabLn("// }");
  136. _output.autoTabLn("// return Request.CreateResponse(HttpStatusCode.OK, model);");
  137. _output.autoTabLn("// }");
  138. _output.autoTabLn("// else");
  139. _output.autoTabLn("// {");
  140. _output.autoTabLn("// return Request.CreateResponse(HttpStatusCode.BadRequest);");
  141. _output.autoTabLn("// }");
  142. _output.autoTabLn("//}");
  143. _output.autoTabLn("");
  144. _output.autoTabLn("#endregion");
  145. _output.tabLevel--;
  146. _output.autoTabLn("}");
  147. _output.tabLevel--;
  148. _output.autoTabLn("}");
  149. _context.FileList.Add(" " + StringFormatter.CleanUpClassName(table.Name) + "Controller.cs");
  150. SaveOutput(CreateFullPath(_namespaceName + "\\Controllers", StringFormatter.CleanUpClassName(table.Name) + "Controller.cs"), SaveActions.DontOverwrite);
  151. }
  152. private void RenderBaseControllerClass()
  153. {
  154. _hdrUtil.WriteClassHeader(_output);
  155. _output.autoTabLn("using System;");
  156. _output.autoTabLn("using System.Collections.Generic;");
  157. _output.autoTabLn("using System.Linq;");
  158. _output.autoTabLn("using System.Net;");
  159. _output.autoTabLn("using System.Net.Http;");
  160. _output.autoTabLn("using System.Web.Http;");
  161. _output.autoTabLn("using " + _script.Settings.BusinessObjects.BusinessObjectsNamespace + ";");
  162. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ";");
  163. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Generated;");
  164. _output.autoTabLn("");
  165. _output.autoTabLn("namespace " + _namespaceName + ".Controllers");
  166. _output.autoTabLn("{");
  167. _output.tabLevel++;
  168. _output.autoTabLn("/// <summary>");
  169. _output.autoTabLn("/// This is the common base ApiController used for all controllers.");
  170. _output.autoTabLn("/// </summary>");
  171. _output.autoTabLn("/// <typeparam name=\"T\"></typeparam>");
  172. _output.autoTabLn("public class BaseController<T> : ApiController where T : Entity");
  173. _output.autoTabLn("{");
  174. _output.tabLevel++;
  175. _output.autoTabLn("#region ctors");
  176. _output.autoTabLn("private readonly IRepository<T> _repository;");
  177. _output.autoTabLn("private readonly IUnitOfWork _unitOfWork;");
  178. _output.autoTabLn("");
  179. _output.autoTabLn("public BaseController(IRepository<T> repository, IUnitOfWork unitOfWork)");
  180. _output.autoTabLn("{");
  181. _output.tabLevel++;
  182. _output.autoTabLn("this._unitOfWork = unitOfWork;");
  183. _output.autoTabLn("this._repository = repository;");
  184. _output.tabLevel--;
  185. _output.autoTabLn("}");
  186. _output.autoTabLn("");
  187. _output.autoTabLn("#endregion");
  188. _output.autoTabLn("");
  189. _output.autoTabLn("#region Basic CRUD");
  190. _output.autoTabLn("");
  191. _output.autoTabLn("/// <summary>");
  192. _output.autoTabLn("/// Get all the entities in the repository.");
  193. _output.autoTabLn("/// </summary>");
  194. _output.autoTabLn("/// <returns></returns>");
  195. _output.autoTabLn("public IEnumerable<T> Get()");
  196. _output.autoTabLn("{");
  197. _output.tabLevel++;
  198. _output.autoTabLn("return _repository.Get();");
  199. _output.tabLevel--;
  200. _output.autoTabLn("}");
  201. _output.autoTabLn("");
  202. _output.autoTabLn("/// <summary>");
  203. _output.autoTabLn("/// Get the selected entity.");
  204. _output.autoTabLn("/// </summary>");
  205. _output.autoTabLn("/// <param name=\"id\">Id</param>");
  206. _output.autoTabLn("/// <returns></returns>");
  207. _output.autoTabLn("public T Get(int id)");
  208. _output.autoTabLn("{");
  209. _output.tabLevel++;
  210. _output.autoTabLn("T model = _repository.GetById(id);");
  211. _output.autoTabLn("if (model == null)");
  212. _output.tabLevel++;
  213. _output.autoTabLn("throw new HttpResponseException(Request.CreateResponse(HttpStatusCode.NotFound));");
  214. _output.tabLevel--;
  215. _output.autoTabLn("");
  216. _output.autoTabLn("return model;");
  217. _output.tabLevel--;
  218. _output.autoTabLn("}");
  219. _output.autoTabLn("");
  220. _output.autoTabLn("/// <summary>");
  221. _output.autoTabLn("/// Insert a new model into the repository.");
  222. _output.autoTabLn("/// </summary>");
  223. _output.autoTabLn("/// <param name=\"model\">model</param>");
  224. _output.autoTabLn("/// <returns></returns>");
  225. _output.autoTabLn("public HttpResponseMessage Post(T model)");
  226. _output.autoTabLn("{");
  227. _output.tabLevel++;
  228. _output.autoTabLn("if (ModelState.IsValid)");
  229. _output.autoTabLn("{");
  230. _output.tabLevel++;
  231. _output.autoTabLn("_repository.Insert(model);");
  232. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  233. _output.autoTabLn("");
  234. _output.autoTabLn("var response = Request.CreateResponse(HttpStatusCode.Created, model);");
  235. _output.autoTabLn("response.Headers.Location = new Uri(Url.Link(\"DefaultApi\", new { id = model.Id }));");
  236. _output.autoTabLn("");
  237. _output.autoTabLn("return response;");
  238. _output.tabLevel--;
  239. _output.autoTabLn("}");
  240. _output.autoTabLn("else");
  241. _output.autoTabLn("{");
  242. _output.tabLevel++;
  243. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.BadRequest);");
  244. _output.tabLevel--;
  245. _output.autoTabLn("}");
  246. _output.tabLevel--;
  247. _output.autoTabLn("}");
  248. _output.autoTabLn("");
  249. _output.autoTabLn("/// <summary>");
  250. _output.autoTabLn("/// Update the selected model.");
  251. _output.autoTabLn("/// </summary>");
  252. _output.autoTabLn("/// <param name=\"model\">model</param>");
  253. _output.autoTabLn("/// <returns></returns>");
  254. _output.autoTabLn("public HttpResponseMessage Put(T model)");
  255. _output.autoTabLn("{");
  256. _output.tabLevel++;
  257. _output.autoTabLn("if (ModelState.IsValid)");
  258. _output.autoTabLn("{");
  259. _output.tabLevel++;
  260. _output.autoTabLn("try");
  261. _output.autoTabLn("{");
  262. _output.tabLevel++;
  263. _output.autoTabLn("_repository.Update(model);");
  264. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  265. _output.tabLevel--;
  266. _output.autoTabLn("}");
  267. _output.autoTabLn("catch (Exception)");
  268. _output.autoTabLn("{");
  269. _output.tabLevel++;
  270. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  271. _output.tabLevel--;
  272. _output.autoTabLn("}");
  273. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, model);");
  274. _output.tabLevel--;
  275. _output.autoTabLn("}");
  276. _output.autoTabLn("else");
  277. _output.autoTabLn("{");
  278. _output.tabLevel++;
  279. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.BadRequest);");
  280. _output.tabLevel--;
  281. _output.autoTabLn("}");
  282. _output.tabLevel--;
  283. _output.autoTabLn("}");
  284. _output.autoTabLn("");
  285. _output.autoTabLn("/// <summary>");
  286. _output.autoTabLn("/// Alternate generic Put method with an Id argument.");
  287. _output.autoTabLn("/// </summary>");
  288. _output.autoTabLn("/// <param name=\"id\"></param>");
  289. _output.autoTabLn("/// <param name=\"model\"></param>");
  290. _output.autoTabLn("/// <returns></returns>");
  291. _output.autoTabLn("public HttpResponseMessage Put(int id, T model)");
  292. _output.autoTabLn("{");
  293. _output.tabLevel++;
  294. _output.autoTabLn("if (ModelState.IsValid && id == model.Id)");
  295. _output.autoTabLn("{");
  296. _output.tabLevel++;
  297. _output.autoTabLn("try");
  298. _output.autoTabLn("{");
  299. _output.tabLevel++;
  300. _output.autoTabLn("_repository.Update(model);");
  301. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  302. _output.tabLevel--;
  303. _output.autoTabLn("}");
  304. _output.autoTabLn("catch (Exception)");
  305. _output.autoTabLn("{");
  306. _output.tabLevel++;
  307. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  308. _output.tabLevel--;
  309. _output.autoTabLn("}");
  310. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, model);");
  311. _output.tabLevel--;
  312. _output.autoTabLn("}");
  313. _output.autoTabLn("else");
  314. _output.autoTabLn("{");
  315. _output.tabLevel++;
  316. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.BadRequest);");
  317. _output.tabLevel--;
  318. _output.autoTabLn("}");
  319. _output.tabLevel--;
  320. _output.autoTabLn("}");
  321. _output.autoTabLn("/// <summary>");
  322. _output.autoTabLn("/// Delete the selected model by Id.");
  323. _output.autoTabLn("/// </summary>");
  324. _output.autoTabLn("/// <param name=\"id\">Id</param>");
  325. _output.autoTabLn("/// <returns></returns>");
  326. _output.autoTabLn("public HttpResponseMessage Delete(int id)");
  327. _output.autoTabLn("{");
  328. _output.tabLevel++;
  329. _output.autoTabLn("T model = _repository.GetById(id);");
  330. _output.autoTabLn("return Delete(model);");
  331. _output.tabLevel--;
  332. _output.autoTabLn("}");
  333. _output.autoTabLn("");
  334. _output.autoTabLn("/// <summary>");
  335. _output.autoTabLn("/// Delete the selected model via the model.");
  336. _output.autoTabLn("/// </summary>");
  337. _output.autoTabLn("/// <param name=\"model\"></param>");
  338. _output.autoTabLn("/// <returns></returns>");
  339. _output.autoTabLn("public HttpResponseMessage Delete(T model)");
  340. _output.autoTabLn("{");
  341. _output.tabLevel++;
  342. _output.autoTabLn("T localModel = _repository.GetById(model.Id);");
  343. _output.autoTabLn("if (localModel == null)");
  344. _output.autoTabLn("{");
  345. _output.tabLevel++;
  346. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  347. _output.tabLevel--;
  348. _output.autoTabLn("}");
  349. _output.autoTabLn("");
  350. _output.autoTabLn("try");
  351. _output.autoTabLn("{");
  352. _output.tabLevel++;
  353. _output.autoTabLn("_repository.Delete(localModel);");
  354. _output.autoTabLn("_unitOfWork." + _script.Settings.DataOptions.DataContext.Name + ".Commit();");
  355. _output.tabLevel--;
  356. _output.autoTabLn("}");
  357. _output.autoTabLn("catch (Exception)");
  358. _output.autoTabLn("{");
  359. _output.tabLevel++;
  360. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.NotFound);");
  361. _output.tabLevel--;
  362. _output.autoTabLn("}");
  363. _output.autoTabLn("");
  364. _output.autoTabLn("return Request.CreateResponse(HttpStatusCode.OK, localModel);");
  365. _output.tabLevel--;
  366. _output.autoTabLn("}");
  367. _output.autoTabLn("#endregion");
  368. _output.autoTabLn("");
  369. _output.tabLevel--;
  370. _output.autoTabLn("}");
  371. _output.tabLevel--;
  372. _output.autoTabLn("}");
  373. _context.FileList.Add(" BaseController.cs");
  374. SaveOutput(CreateFullPath(_namespaceName + "\\Controllers", "BaseController.cs"), SaveActions.Overwrite);
  375. }
  376. private void RenderUnityWebApiConfigurationClass()
  377. {
  378. _hdrUtil.WriteClassHeader(_output);
  379. _output.autoTabLn("[assembly: WebActivator.PreApplicationStartMethod(typeof(" + _namespaceName + ".App_Start.UnityWebApi), \"Start\")]");
  380. _output.autoTabLn("[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(" + _namespaceName + ".App_Start.UnityWebApi), \"Stop\")]");
  381. _output.autoTabLn("");
  382. _output.autoTabLn("");
  383. _output.autoTabLn("namespace " + _namespaceName + ".App_Start");
  384. _output.autoTabLn("{");
  385. _output.tabLevel++;
  386. _output.autoTabLn("using System;");
  387. _output.autoTabLn("using System.Linq;");
  388. _output.autoTabLn("using System.Web.Http;");
  389. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ";");
  390. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Interfaces;");
  391. _output.autoTabLn("using " + _script.Settings.DataOptions.DataObjectsNamespace + ".Repositories;");
  392. _output.autoTabLn("using Microsoft.Practices.Unity;");
  393. _output.autoTabLn("");
  394. _output.autoTabLn("public static class UnityWebApi");
  395. _output.autoTabLn("{");
  396. _output.tabLevel++;
  397. _output.autoTabLn("private static IUnityContainer container;");
  398. _output.autoTabLn("");
  399. _output.autoTabLn("#region Public Methods");
  400. _output.autoTabLn("public static void Start()");
  401. _output.autoTabLn("{");
  402. _output.tabLevel++;
  403. _output.autoTabLn("Initialise();");
  404. _output.tabLevel--;
  405. _output.autoTabLn("}");
  406. _output.autoTabLn("");
  407. _output.autoTabLn("public static void Stop()");
  408. _output.autoTabLn("{");
  409. _output.autoTabLn("");
  410. _output.autoTabLn("} ");
  411. _output.autoTabLn("#endregion");
  412. _output.autoTabLn("");
  413. _output.autoTabLn("#region Private Methods");
  414. _output.autoTabLn("private static void Initialise()");
  415. _output.autoTabLn("{");
  416. _output.tabLevel++;
  417. _output.autoTabLn("container = BuildUnityContainer();");
  418. _output.autoTabLn("");
  419. _output.autoTabLn("GlobalConfiguration.Configuration.DependencyResolver = new Unity.WebApi.UnityDependencyResolver(container);");
  420. _output.tabLevel--;
  421. _output.autoTabLn("}");
  422. _output.autoTabLn("");
  423. _output.autoTabLn("private static IUnityContainer BuildUnityContainer()");
  424. _output.autoTabLn("{");
  425. _output.tabLevel++;
  426. _output.autoTabLn("var container = new UnityContainer();");
  427. _output.autoTabLn("");
  428. foreach (string tableName in _script.Tables)
  429. {
  430. ITable table = _context.Database.Tables[tableName];
  431. _output.autoTabLn("container.RegisterType<I" + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ", " + StringFormatter.CleanUpClassName(table.Name) + _script.Settings.DataOptions.ClassSuffix.Name + ">();");
  432. }
  433. _output.autoTabLn("container.RegisterType<IUnitOfWork, UnitOfWork>(new HierarchicalLifetimeManager());");
  434. _output.autoTabLn("");
  435. _output.autoTabLn("return container;");
  436. _output.tabLevel--;
  437. _output.autoTabLn("} ");
  438. _output.autoTabLn("#endregion");
  439. _output.tabLevel--;
  440. _output.autoTabLn("}");
  441. _output.tabLevel--;
  442. _output.autoTabLn("}");
  443. _context.FileList.Add(" UnityWebApi.cs");
  444. SaveOutput(CreateFullPath(_namespaceName + "\\App_Start", "UnityWebApi.cs"), SaveActions.Overwrite);
  445. }
  446. #endregion
  447. }
  448. }