private static IDictionary <string, IPluginAdapter <T> > CreateRoutingTable( IContractConfiguration configuration, IDictionary <Guid, IPluginAdapter <T> > adapters) { Guid primaryId = configuration.RoutablePlugins.First(p => p.Primary).Id; IEnumerable <IRoutablePluginConfiguration> nonPrimaryPlugins = configuration.RoutablePlugins.Where(p => p.Id != primaryId); IDictionary <string, IPluginAdapter <T> > routingTable = nonPrimaryPlugins .SelectMany(p => p.MethodClaims, (config, method) => new { config.Id, Claim = method }) .ToDictionary(k => k.Claim, v => adapters[v.Id]); IPluginAdapter <T> primaryAdapter = adapters[primaryId]; IEnumerable <string> unclaimedMethodNames = typeof(T).GetMethods() .Where(m => !routingTable.Keys.Contains(m.Name)) .Select(m => m.Name) .Distinct(); foreach (var unclaimedMethodName in unclaimedMethodNames) { routingTable.Add(unclaimedMethodName, primaryAdapter); } return(routingTable); }
/// <summary> /// Initializes a new instance of the <see cref="HostAdapter{T}"/> class. /// </summary> /// <param name="context">The context to access the routable adapters through.</param> /// <param name="configuration"> /// Configuration for the Extensibility framework containing call-routable plugin information. /// </param> internal HostAdapter(PluginContext context, IExtensibilityConfiguration configuration) { Require.NotNull(context, nameof(context)); Require.NotNull(configuration, nameof(configuration)); IDictionary <Guid, IPluginAdapter <T> > adapters = context.Load <IPluginAdapter <T>, RoutableMetadataView>() .ToDictionary(k => k.Metadata.PluginId, v => v.Value); IContractConfiguration contractConfiguration = FindContractConfiguration(configuration); _routingTable = CreateRoutingTable(contractConfiguration, adapters); }
public HttpHostConfiguration AddContractConfiguration(IContractConfiguration configureContract) { this.contractConfiguration.Add(configureContract); return(this); }
public HttpHostConfiguration AddContractConfiguration(IContractConfiguration configureContract) { this.contractConfiguration.Add(configureContract); return this; }