示例#1
0
        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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
 public HttpHostConfiguration AddContractConfiguration(IContractConfiguration configureContract)
 {
     this.contractConfiguration.Add(configureContract);
     return(this);
 }
 public HttpHostConfiguration AddContractConfiguration(IContractConfiguration configureContract)
 {
     this.contractConfiguration.Add(configureContract);
     return this;
 }