Skip to content

Commit a136c2c

Browse files
committed
Added DI helpers. Thanks @gjkaal! (#12)
1 parent 380a095 commit a136c2c

File tree

4 files changed

+55
-0
lines changed

4 files changed

+55
-0
lines changed
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
using Microsoft.Extensions.DependencyInjection;
2+
3+
namespace SimpleFeedReader;
4+
5+
/// <summary>
6+
/// Extension methods for configuring the feed reader service.
7+
/// </summary>
8+
public static class BuilderConfiguration
9+
{
10+
/// <summary>
11+
/// Add the feed reader service to your application.
12+
/// </summary>
13+
/// <param name="services">The service collection to add the feed reader to.</param>
14+
/// <param name="options">The options to configure the feed reader.</param>
15+
public static IServiceCollection AddFeedReader(this IServiceCollection services, Func<FeedReaderOptions> options)
16+
{
17+
var setup = options?.Invoke() ?? new FeedReaderOptions();
18+
19+
services.AddSingleton<IFeedReader>(new FeedReader(setup));
20+
return services;
21+
}
22+
}

SimpleFeedReader/FeedReader.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,15 @@ public FeedReader(bool throwOnError, HttpClient? httpClient = null)
7070
public FeedReader(IFeedItemNormalizer defaultFeedItemNormalizer, HttpClient? httpClient = null)
7171
: this(defaultFeedItemNormalizer, false, httpClient) { }
7272

73+
74+
/// <summary>
75+
/// Initializes a new instance of the <see cref="FeedReader"/> class.
76+
/// </summary>
77+
/// <param name="options">Initialization options.</param>
78+
public FeedReader(FeedReaderOptions options)
79+
: this(options.DefaultNormalizer, options.ThrowOnError) { }
80+
81+
7382
/// <inheritdoc/>
7483
public Task<IEnumerable<FeedItem>> RetrieveFeedsAsync(IEnumerable<string> uris, CancellationToken cancellationToken = default)
7584
=> RetrieveFeedsAsync(uris, DefaultNormalizer, cancellationToken);
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System.Net.Http;
2+
using System.ServiceModel.Syndication;
3+
4+
namespace SimpleFeedReader;
5+
6+
/// <summary>
7+
/// Options to configure the <see cref="FeedReader"/>.
8+
/// </summary>
9+
public class FeedReaderOptions
10+
{
11+
/// <summary>
12+
/// The default normalizer to use when normalizing <see cref="SyndicationItem"/>s.
13+
/// </summary>
14+
public IFeedItemNormalizer DefaultNormalizer { get; set; } = new DefaultFeedItemNormalizer();
15+
/// <summary>
16+
/// When true, the <see cref="FeedReader"/> will throw on errors.
17+
/// </summary>
18+
public bool ThrowOnError { get; set; } = false;
19+
/// <summary>
20+
/// When you want to use a custom <see cref="HttpClient"/> you can set it through here.
21+
/// </summary>
22+
public HttpClient? HttpClient { get; set; } = null;
23+
}

SimpleFeedReader/SimpleFeedReader.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
</ItemGroup>
3535

3636
<ItemGroup>
37+
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="9.0.2" />
3738
<PackageReference Include="PolySharp" Version="1.15.0">
3839
<PrivateAssets>all</PrivateAssets>
3940
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>

0 commit comments

Comments
 (0)