Exemplo n.º 1
0
 public MetadataLoader CreateLoader(ITypeLibraryElement tlElement, string filename, byte[] bytes)
 {
     Type loaderType = null;
     if (string.IsNullOrEmpty(tlElement.Loader))
     {
         // By default, assume TypeLibraryLoader is intended.
         loaderType = typeof(TypeLibraryLoader);
     }
     else
     {
         var cfgSvc = services.RequireService<IConfigurationService>();
         var diagSvc = services.RequireService<IDiagnosticsService>();
         var ldrElement = cfgSvc.GetImageLoaders()
             .OfType<LoaderConfiguration>()
             .Where(le => le.Label == tlElement.Loader)
             .FirstOrDefault();
         if (ldrElement != null && !string.IsNullOrEmpty(ldrElement.TypeName)) 
         {
             loaderType = Type.GetType(ldrElement.TypeName, false);
         }
         if (loaderType == null)
         {
             diagSvc.Warn(
                 "Metadata loader type {0} is unknown.", 
                 tlElement.Loader);
             return null;
         }
     }
     return (MetadataLoader)Activator.CreateInstance(loaderType, services, filename, bytes);
 }
Exemplo n.º 2
0
        public MetadataLoader CreateLoader(ITypeLibraryElement tlElement, string filename, byte[] bytes)
        {
            Type loaderType = null;

            if (string.IsNullOrEmpty(tlElement.Loader))
            {
                // By default, assume TypeLibraryLoader is intended.
                loaderType = typeof(TypeLibraryLoader);
            }
            else
            {
                var cfgSvc     = services.RequireService <IConfigurationService>();
                var diagSvc    = services.RequireService <IDiagnosticsService>();
                var ldrElement = cfgSvc.GetImageLoaders()
                                 .OfType <LoaderConfiguration>()
                                 .Where(le => le.Label == tlElement.Loader)
                                 .FirstOrDefault();
                if (ldrElement != null && !string.IsNullOrEmpty(ldrElement.TypeName))
                {
                    loaderType = Type.GetType(ldrElement.TypeName, false);
                }
                if (loaderType == null)
                {
                    diagSvc.Warn(string.Format("Metadata loader type {0} is unknown.", tlElement.Loader));
                    return(null);
                }
            }
            return((MetadataLoader)Activator.CreateInstance(loaderType, services, filename, bytes));
        }
Exemplo n.º 3
0
        public TypeLibrary LoadMetadataIntoLibrary(IPlatform platform, ITypeLibraryElement tlElement, TypeLibrary libDst)
        {
            var cfgSvc  = services.RequireService <IConfigurationService>();
            var fsSvc   = services.RequireService <IFileSystemService>();
            var diagSvc = services.RequireService <IDiagnosticsService>();

            try
            {
                string libFileName = cfgSvc.GetInstallationRelativePath(tlElement.Name);
                if (!fsSvc.FileExists(libFileName))
                {
                    return(libDst);
                }

                byte[]         bytes  = fsSvc.ReadAllBytes(libFileName);
                MetadataLoader loader = CreateLoader(tlElement, libFileName, bytes);
                if (loader == null)
                {
                    return(libDst);
                }
                var lib = loader.Load(platform, libDst);
                return(lib);
            }
            catch (Exception ex)
            {
                diagSvc.Error(ex, string.Format("Unable to load metadata file {0}.", tlElement.Name));
                return(libDst);
            }
        }
Exemplo n.º 4
0
 private void Expect_TypeLibraryLoaderService_LoadLibrary(ITypeLibraryElement expected, TypeLibrary dstLib)
 {
     environmentMetadata = dstLib;
     tlSvc.Expect(t => t.LoadMetadataIntoLibrary(
                      Arg <IPlatform> .Is.NotNull,
                      Arg <ITypeLibraryElement> .Matches(a => a.Name == expected.Name),
                      Arg <TypeLibrary> .Is.NotNull))
     .Return(dstLib);
 }
Exemplo n.º 5
0
 private void Expect_TypeLibraryLoaderService_LoadLibrary(ITypeLibraryElement expected, TypeLibrary dstLib)
 {
     environmentMetadata = dstLib;   
     tlSvc.Expect(t => t.LoadMetadataIntoLibrary(
         Arg<IPlatform>.Is.NotNull,
         Arg<ITypeLibraryElement>.Matches(a => a.Name == expected.Name),
         Arg<TypeLibrary>.Is.NotNull))
         .Return(dstLib);
 }
Exemplo n.º 6
0
 private void Expect_TypeLibraryLoaderService_LoadLibrary(ITypeLibraryElement expected, TypeLibrary dstLib)
 {
     environmentMetadata = dstLib;
     tlSvc.Setup(t => t.LoadMetadataIntoLibrary(
                     It.IsNotNull <IPlatform>(),
                     It.Is <ITypeLibraryElement>(a => a.Name == expected.Name),
                     It.IsNotNull <TypeLibrary>()))
     .Returns(dstLib)
     .Verifiable();
 }
Exemplo n.º 7
0
        public TypeLibrary LoadMetadataIntoLibrary(IPlatform platform, ITypeLibraryElement tlElement, TypeLibrary libDst)
        {
            var cfgSvc = services.RequireService<IConfigurationService>();
            var fsSvc = services.RequireService<IFileSystemService>();
            var diagSvc = services.RequireService<IDiagnosticsService>();
            try
            {
                string libFileName = cfgSvc.GetInstallationRelativePath(tlElement.Name);
                if (!fsSvc.FileExists(libFileName)) 
                    return libDst;

                byte[] bytes = fsSvc.ReadAllBytes(libFileName);
                MetadataLoader loader = CreateLoader(tlElement, libFileName, bytes);
                if (loader == null)
                    return libDst;
                var lib = loader.Load(platform, libDst);
                return lib;
            }
            catch (Exception ex)
            {
                diagSvc.Error(ex, string.Format("Unable to load metadata file {0}.", tlElement.Name));
                return libDst;
            }
        }
Exemplo n.º 8
0
 private TypeLibrary LoadTypelibrary(IConfigurationService cfgSvc, ITypeLibraryElement tl, LoaderElement ldr)
 {
     var type = Type.GetType(ldr.TypeName, true);
     var filename = cfgSvc.GetPath(tl.Name);
     var bytes = File.ReadAllBytes(filename);
     var loader = (MetadataLoader)Activator.CreateInstance(type, Services, filename, bytes);
     return loader.Load(this);
 }