private MarkerResource(MarkerResource markerResource) { Source = markerResource.Source; Format = markerResource.Format; PollingInterval = markerResource.PollingInterval; }
/// <summary> /// Selects an IMarkerProvider plugin that supports the type of specified Marker. /// </summary> /// <remarks> /// The MarkerResource passed to this method is used to determine which type of MarkerProvider to return. /// If more than one plugin supports the MarkerResource (based on the required capabilities in its attributes), the first plugin found that matches the requirements in used. /// If more than one plugin matches the requirements, a plugin already instantiated will take precedence over other plugins. /// </remarks> /// <returns> /// An IMarkerProvider that supports the type of marker passed as a parameter. /// </returns> protected virtual IMarkerProvider SelectMarkerProvider(MarkerResource markerResource) { IEnumerable<LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata>> results = PluginsManager. MarkerProviderPlugins .Where( i => (i.Metadata.SupportedFormat == markerResource.Format) && (i.Metadata.SupportsPolling || !markerResource.PollingInterval.HasValue)); //Favor Plugins that have already been instantiated LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata> result = results.Any(i => i.IsValueCreated) ? results.First( i => i.IsValueCreated) : results.FirstOrDefault(); return result != null ? result.Value : null; }
protected virtual IMarkerProvider SelectMarkerProvider(MarkerResource markerResource) { var results = new List<LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata>>(); foreach (var markerProviderPlugin in PluginsManager.MarkerProviderPlugins) { if (markerProviderPlugin.LooseMetadata.ContainsKeyIgnoreCase("supportedformat") && markerProviderPlugin.LooseMetadata.GetEntryIgnoreCase("supportedformat").Equals(markerResource.Format)) { bool supportsPolling; if (!markerResource.PollingInterval.HasValue || (markerProviderPlugin.LooseMetadata.ContainsKeyIgnoreCase("supportspolling") && bool.TryParse(markerProviderPlugin.LooseMetadata.GetEntryIgnoreCase("supportspolling").ToString(), out supportsPolling) && supportsPolling)) { results.Add(markerProviderPlugin); } } } //Favor Plugins that have already been instantiated LooseMetadataLazy<IMarkerProvider, IMarkerProviderMetadata> result = results.Any(i => i.IsValueCreated) ? results.First( i => i.IsValueCreated) : results.FirstOrDefault(); return result != null ? result.Value : null; }
private IMarkerProvider InitializeMarkerProvider(MarkerResource resource) { var markerProvider = SelectMarkerProvider(resource); if (markerProvider != null) { markerProvider.Source = resource.Source; markerProvider.PollingInterval = resource.PollingInterval; } else { SendLogEntry(KnownLogEntryTypes.UnableToLocateMarkerProvider, LogLevel.Warning, SilverlightMediaFrameworkResources.UnableToLocateMarkerProviderLogMessage); } return markerProvider; }