Fix DI Registration for IDownstreamRouteProvider (#656)

The two singletons registered for IDownstreamRouteProvider,
DownstreamRouteFinder and DownstreamRouteCreator, were registered using
`TryAddSingleton`. This would cause DownstreamRouteFinder to be
instantiated and found but the "Try" made DownstreamRouteCreator not
registered.

This was noted in the following in `DownstreamRouteProviderFactory`:

```
_providers = provider.GetServices<IDownstreamRouteProvider>().ToDictionary(x => x.GetType().Name);
```

With the registration being done using `TryAddSingleton` only one
element was added to the dictionary. Changing this to `AddSingleton`
fixed this issue.

This was uncovered in an error on line 30 of
`DownstreamRouteProviderFactory`. The key for
`nameof(DownstreamRouteCreator)` did not exist causing an exception to
be thrown.
This commit is contained in:
Mike 2018-10-13 06:53:59 -04:00 committed by Tom Pallister
parent 622de5efd0
commit 7fb66dd34d

View File

@ -94,8 +94,8 @@ namespace Ocelot.DependencyInjection
Services.TryAddSingleton<IUrlPathToUrlTemplateMatcher, RegExUrlMatcher>(); Services.TryAddSingleton<IUrlPathToUrlTemplateMatcher, RegExUrlMatcher>();
Services.TryAddSingleton<IPlaceholderNameAndValueFinder, UrlPathPlaceholderNameAndValueFinder>(); Services.TryAddSingleton<IPlaceholderNameAndValueFinder, UrlPathPlaceholderNameAndValueFinder>();
Services.TryAddSingleton<IDownstreamPathPlaceholderReplacer, DownstreamTemplatePathPlaceholderReplacer>(); Services.TryAddSingleton<IDownstreamPathPlaceholderReplacer, DownstreamTemplatePathPlaceholderReplacer>();
Services.TryAddSingleton<IDownstreamRouteProvider, DownstreamRouteFinder>(); Services.AddSingleton<IDownstreamRouteProvider, DownstreamRouteFinder>();
Services.TryAddSingleton<IDownstreamRouteProvider, DownstreamRouteCreator>(); Services.AddSingleton<IDownstreamRouteProvider, DownstreamRouteCreator>();
Services.TryAddSingleton<IDownstreamRouteProviderFactory, DownstreamRouteProviderFactory>(); Services.TryAddSingleton<IDownstreamRouteProviderFactory, DownstreamRouteProviderFactory>();
Services.TryAddSingleton<IHttpRequester, HttpClientHttpRequester>(); Services.TryAddSingleton<IHttpRequester, HttpClientHttpRequester>();
Services.TryAddSingleton<IHttpResponder, HttpContextResponder>(); Services.TryAddSingleton<IHttpResponder, HttpContextResponder>();