public CodeNamespace Build(SynchronousDomainHook domainClass) { var codeNamespace = _nameSpaceBuilderUtil.WithName($"{_applicationNameSpace}.{domainClass.ClassType}s.Hooks") .WithTask() .WithDomainEntityNameSpace(domainClass.ClassType) .WithDomain() .Build(); var codeTypeDeclaration = _classBuilderUtil.BuildPartial($"{domainClass.Name}Hook"); codeTypeDeclaration.BaseTypes.Add(new CodeTypeReference(new DomainHookBaseClass().Name)); var field = new CodeMemberField { Name = $"EventType {{ get; private set; }} = typeof({domainClass.ClassType}{domainClass.MethodName}Event);NewHackGuid302315ed-3a05-4992-9f76-4cf075cde515", Attributes = MemberAttributes.Public | MemberAttributes.Final, Type = new CodeTypeReference("Type") }; codeTypeDeclaration.Members.Add(field); codeNamespace.Types.Add(codeTypeDeclaration); var codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Parameters.Add( new CodeParameterDeclarationExpression(new CodeTypeReference(new DomainEventBaseClass().Name), "domainEvent")); codeMemberMethod.ReturnType = new CodeTypeReference($"async {new DomainHookBaseClass().Methods[0].ReturnType}"); codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; codeMemberMethod.Name = new DomainHookBaseClass().Methods[0].Name; codeMemberMethod.Statements.Add(new CodeConditionStatement( new CodeSnippetExpression( $"domainEvent is {domainClass.ClassType}{domainClass.MethodName}Event parsedEvent"), new CodeStatement[] { new CodeExpressionStatement(new CodeSnippetExpression("return await Execute(parsedEvent)")) } )); codeMemberMethod.Statements.Add( new CodeSnippetExpression("throw new Exception(\"Event is not in the correct list\")")); codeTypeDeclaration.Members.Add(codeMemberMethod); return(codeNamespace); }
public CodeNamespace BuildReplacementClass(SynchronousDomainHook domainClass) { var codeNamespace = _nameSpaceBuilderUtil.WithName($"{_applicationNameSpace}.{domainClass.ClassType}s.Hooks").WithTask().WithList().Build(); var codeTypeDeclaration = _classBuilderUtil.BuildPartial($"{domainClass.Name}Hook"); codeNamespace.Imports.Add(new CodeNamespaceImport($"Domain.{domainClass.ClassType}s")); codeNamespace.Imports.Add(new CodeNamespaceImport("Domain")); codeNamespace.Types.Add(codeTypeDeclaration); var codeMemberMethod = new CodeMemberMethod(); codeMemberMethod.Parameters.Add( new CodeParameterDeclarationExpression(new CodeTypeReference($"{domainClass.ClassType}{domainClass.MethodName}Event"), "domainEvent")); codeMemberMethod.ReturnType = new CodeTypeReference($"async {new DomainHookBaseClass().Methods[0].ReturnType}"); codeMemberMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final; codeMemberMethod.Name = "Execute"; codeMemberMethod.Statements.Add(new CodeSnippetExpression("// TODO: Implement this method")); codeMemberMethod.Statements.Add(new CodeSnippetExpression("return await Task.FromResult(HookResult.ErrorResult(new List<string>{\"A generated Synchronouse Doman Hook Method that is not implemented was called, aborting...\"}))")); codeTypeDeclaration.Members.Add(codeMemberMethod); return(codeNamespace); }