Пример #1
0
        public async Task WhenACommandhandlerIsGenerated(string handlerName)
        {
            var result = await this._applicationExecutor.ExecuteAsync <ISqlCqrsGenerator, SourceUnitCollection>(x => x.Generate(0));

            DynamicAssembly assembly = new DynamicAssembly(NSubstitute.Substitute.For <IEventHub>());

            assembly.AppendSourceUnits(result);
            assembly.AddDefaultReferences();

            TypeCompiler compiler = new TypeCompiler();

            _context["assembly"] = assembly.Compile(compiler);

            assembly.Assembly.GetTypes().Should().Contain(x => x.Name == handlerName);
        }
Пример #2
0
        private async Task CompileAndLoad(Workspace[] workspaces)
        {
            var myWorksSpace = await FindOrCreate(workspaces);

            try
            {
                var result = await _sqlCqrsGenerator.Generate(0);

                if (result.Any())
                {
                    if (_dynamicPool.All(x => x.SourceUnits.SrcHash != result.SrcHash))
                    {
                        _logger.Info("New metadata model loaded from database with {hash} hash.", result.SrcHash);

                        DynamicAssembly assembly = new DynamicAssembly(_eventHub);
                        assembly.AddDefaultReferences();
                        assembly.AppendSourceUnits(result);
                        assembly.Compile();

                        _dynamicPool.AddOrReplace(assembly);
                        _metadataProvider.Clear();
                        _metadataProvider.Discover(assembly.Assembly);

                        // TODO: Refactor this and from Load
                        await _eventHub.Publish(new AssemblyLoadedEvent()
                        {
                            Assembly = assembly.Assembly, Purpose = assembly.Purpose
                        });

                        var c = await _repo.Query <Model.Compilation>()
                                .FirstAsync(x => x.Hash == assembly.SrcHash);

                        c.Workspace         = myWorksSpace;
                        myWorksSpace.Status = WorkspaceStatus.Running;
                        c.LoadedAt          = DateTimeOffset.Now;
                        await _repo.CommitChanges();
                    }
                }
            }
            catch (Exception ex)
            {
                myWorksSpace.Status = WorkspaceStatus.Error;
                myWorksSpace.Error  = ex.Message;
                await _repo.CommitChanges();
            }
        }
Пример #3
0
        private async Task Load(Workspace[] workspaces, Model.Compilation c)
        {
            _logger.Info("Old metadata model loaded from database with {hash} hash.", c.Hash);

            DynamicAssembly assembly = new DynamicAssembly(_eventHub);

            assembly.AddDefaultReferences();
            assembly.Load(c.Assembly, c.Hash);

            _dynamicPool.AddOrReplace(assembly);
            _metadataProvider.Clear();
            _metadataProvider.Discover(assembly.Assembly);

            // TODO: Refactor this and from Load
            await _eventHub.Publish(new AssemblyLoadedEvent()
            {
                Assembly = assembly.Assembly, Purpose = assembly.Purpose
            });


            var w = await SetWorkspaceInfo(workspaces);

            AppDomain.CurrentDomain.SetDynamicWorkspace(w.VersionSignature, w.Id);
        }