private static void ValidateConfiguration(IExtensibilityConfiguration extensibility) { Assert.Equal("testPlugins", extensibility.PluginDirectory); Assert.NotEmpty(extensibility.SegmentedContracts); var contract = extensibility.SegmentedContracts.First(); Assert.Equal("ISegmentedContract", contract.Name); Assert.NotEmpty(contract.RoutablePlugins); Assert.Equal(2, contract.RoutablePlugins.Count()); var firstPlugin = contract.RoutablePlugins.First(); var secondPlugin = contract.RoutablePlugins.Skip(1).First(); Assert.True(firstPlugin.Primary); Assert.False(secondPlugin.Primary); Assert.Equal(new Guid("BE157C54-2BC0-48B8-9E39-0AE53D8A4E61"), firstPlugin.Id); Assert.Equal(new Guid("F544EC74-919E-4167-A421-FA74223F49C5"), secondPlugin.Id); Assert.NotEmpty(secondPlugin.MethodClaims); var methodClaim = secondPlugin.MethodClaims.First(); Assert.Equal("SomeOtherMethod", methodClaim); }
/// <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); }
private static IContractConfiguration FindContractConfiguration(IExtensibilityConfiguration configuration) { string contractName = typeof(T).Name; IContractConfiguration?contractConfiguration = configuration.SegmentedContracts .FirstOrDefault(c => c.Name == contractName); if (contractConfiguration == null) { throw new ArgumentException(Strings.NoContractInConfiguration.InvariantFormat(contractName), nameof(configuration)); } return(contractConfiguration); }