/// <summary>
        /// Searches for extensions in a particular file and tries to load them.
        /// </summary>
        /// <param name="file">The file to load.</param>
        /// <param name="extension">The extension that the file contains</param>
        /// <returns>Returns an array of loading results, indicating which extension loaded succesfully and which didn't.</returns>
        public ExtensionLoadResult[] LoadExtensions(ExtensionLibraryData file)
        {
            try
            {
                if (LoadedExtensions.FirstOrDefault(x => x.GetType().Assembly.Location.Equals(file.GetAbsolutePath(), StringComparison.OrdinalIgnoreCase)) != null)
                {
                    throw new InvalidOperationException("The extension library is already loaded.");
                }

                var extensionTypes = SearchExtensionTypes(file);

                if (extensionTypes.Length == 0)
                {
                    throw new BadImageFormatException(string.Format("No extension classes found in file {0}", file));
                }

                var results = new ExtensionLoadResult[extensionTypes.Length];
                for (int i = 0; i < extensionTypes.Length; i++)
                {
                    results[i] = LoadExtension(extensionTypes[i]);
                }
                return(results);
            }
            catch (Exception ex)
            {
                return(new ExtensionLoadResult[] { new ExtensionLoadResult(file.GetAbsolutePath(), ex) });
            }
        }
 public T GetLoadedExtension <T>() where T : LiteExtension
 {
     return(LoadedExtensions.FirstOrDefault(x => x is T) as T);
 }
 public LiteExtension GetLoadedExtension(Type extensionType)
 {
     return(LoadedExtensions.FirstOrDefault(x => x.GetType() == extensionType));
 }