Пример #1
0
        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);
        }
Пример #2
0
        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);
        }