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); }
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(); } }
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); }