Example #1
0
        public void Export_of_tconvention_should_return_instance_of_exportconventionbuilder_for_tconvention_type()
        {
            var registry =
                new ExportRegistry();

            var result =
                registry.ExportWithConvention <ExportConvention>();

            result.ShouldBeOfType <ExportConventionBuilder <ExportConvention> >();
        }
        public void Export_of_tconvention_should_return_instance_of_exportconventionbuilder_for_tconvention_type()
        {
            var registry =
                new ExportRegistry();

            var result =
                registry.ExportWithConvention<ExportConvention>();

            result.ShouldBeOfType<ExportConventionBuilder<ExportConvention>>();
        }
 public DefaultContainer()
 {
     _extensions = new List<IContainerExtension>();
     _componetnts = new ComponentRegistry();
     _exports = new ExportRegistry();
     _exportproviders = new ExportProviderRegistry();
     _exportproviders.ExportsChanged += ExportsChanged;
     Register(new DefaultExtension());
     _buildEngine = new BuildEngine(this, _exportproviders, _componetnts);
 }
Example #4
0
        private static TsFile[] FixBuild(TsFile[] tsFiles,
                                         ICoder defaultCoder,
                                         CsDeclaration[] csDeclarations)
        {
            var exportRegistry = new ExportRegistry();

            foreach (var tsFile in tsFiles)
            {
                exportRegistry.Register(tsFile);
            }

            var generatedFiles = new List <TsFile>();
            var filesToFix     = new Stack <TsFile>(tsFiles);

            while (filesToFix.Count > 0)
            {
                var fileToFix = filesToFix.Pop();

                // 1. Generating and auto importing external types
                var externals = FindExternals(fileToFix);
                foreach (var csType in externals)
                {
                    if (!exportRegistry.TryGetExport(csType, out var export))
                    {
                        Generate(csType);

                        if (!exportRegistry.TryGetExport(csType, out export))
                        {
                            throw new Exception($"Can not find Export for {csType}");
                        }
                    }

                    if (export.TsFile != fileToFix)
                    {
                        AutoImport(fileToFix, export);
                    }
                }

                // 2. Generating derived types
                var derivedTypes = FindDerivedTypes(externals, csDeclarations);
                foreach (var csType in derivedTypes)
                {
                    if (!exportRegistry.TryGetExport(csType, out _))
                    {
                        Generate(csType);
                    }
                }
            }

            void Generate(CsType csType)
            {
                var csDeclaration        = CsDeclarationFactory.Create(csType.OriginalType);
                var autoGeneratedTsFiles = defaultCoder.Rewrite(new[]
                {
                    csDeclaration
                });

                foreach (var autoGeneratedTsFile in autoGeneratedTsFiles)
                {
                    exportRegistry.Register(autoGeneratedTsFile);
                    filesToFix.Push(autoGeneratedTsFile);
                    generatedFiles.Add(autoGeneratedTsFile);
                }
            }

            return(tsFiles.Concat(generatedFiles).ToArray());
        }