Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
<PackageVersion Include="Microsoft.Extensions.Hosting.Abstractions" Version="10.0.13" />
<PackageVersion Include="RestSharp" Version="114.1.0" />
<PackageVersion Include="Serilog" Version="4.4.0" />
<PackageVersion Include="Zyga.SeriRestClient" Version="0.1.1" />
<PackageVersion Include="Zyga.SeriRestClient" Version="0.2.0" />
</ItemGroup>

<!-- Console sample only. -->
Expand Down
42 changes: 25 additions & 17 deletions src/Zyga.HikIsapiClient/ExtensionMethods/RegistrationExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,10 @@ public static IHostBuilder AddHikIsapi(this IHostBuilder hostBuilder, string con
.GetRequiredSection(configSection)
.Get<IsapiConfig>() ?? throw new Exception($"Section [{configSection}] not found in config")
)
.AddSeriRestClient(Isapi.ServiceKey, (sp, key) =>
{
return sp.GetRequiredService<IIsapiConfig>()
.GetRestClientOptions();
})
.AddSeriRestClient(Isapi.ServiceKey)
.Configure((sp, _, options) => sp.GetRequiredService<IIsapiConfig>()
.ApplyRestClientOptions(options))
.Services
.AddTransient<IIsapi, Isapi>((sp) => new Isapi(
sp.GetRequiredService<IIsapiConfig>(),
sp.GetRequiredService<Serilog.ILogger>(),
Expand All @@ -53,13 +52,13 @@ public static IHostBuilder AddHikIsapi(this IHostBuilder hostBuilder, string con
public static IServiceCollection AddKeyedHikIsapi<TConfig>(this IServiceCollection services, object isapiKey, Func<IServiceProvider, object?, TConfig> implementationFactory)
where TConfig : class, IIsapiConfig
{
return services
services
.AddKeyedSingleton<IIsapiConfig, TConfig>(isapiKey, implementationFactory)
.AddSeriRestClient($"{Isapi.ServiceKey}_{isapiKey}", (sp, seriRestKey) =>
{
return sp.GetRequiredKeyedService<IIsapiConfig>(isapiKey)
.GetRestClientOptions();
})
.AddSeriRestClient($"{Isapi.ServiceKey}_{isapiKey}")
.Configure((sp, _, options) => sp.GetRequiredKeyedService<IIsapiConfig>(isapiKey)
.ApplyRestClientOptions(options));

return services
.AddKeyedScoped<IIsapi, Isapi>(isapiKey, (sp, _) => new Isapi(
sp.GetRequiredKeyedService<IIsapiConfig>(isapiKey),
sp.GetRequiredService<Serilog.ILogger>(),
Expand All @@ -74,11 +73,20 @@ public static IServiceCollection AddKeyedHikIsapi<TConfig>(this IServiceCollecti
/// <returns>Configured <see cref="RestClientOptions"/> pointing at the device's ISAPI endpoint.</returns>
public static RestClientOptions GetRestClientOptions(this IIsapiConfig config)
{
return new RestClientOptions()
{
CookieContainer = new CookieContainer(),
BaseUrl = new Uri($"{config.Address}/ISAPI"),
Timeout = TimeSpan.FromMilliseconds(config.MaxTimeout ?? 5000)
};
var options = new RestClientOptions();
config.ApplyRestClientOptions(options);
return options;
}

/// <summary>
/// Applies a device's configuration onto an existing <see cref="RestClientOptions"/> instance.
/// </summary>
/// <param name="config">The device configuration.</param>
/// <param name="options">The options instance to configure.</param>
private static void ApplyRestClientOptions(this IIsapiConfig config, RestClientOptions options)
{
options.CookieContainer = new CookieContainer();
options.BaseUrl = new Uri($"{config.Address}/ISAPI");
options.Timeout = TimeSpan.FromMilliseconds(config.MaxTimeout ?? 5000);
}
}
Loading