Integrate with Microsoft.Extensions.DependencyInjection (#12)

* Integrate with Microsoft.Extensions.DependencyInjection

* Setup CODEOWNERS
This commit is contained in:
2022-09-09 20:13:59 +02:00
committed by GitHub
parent d349041cbe
commit 544ec77667
7 changed files with 51 additions and 33 deletions
+1
View File
@@ -0,0 +1 @@
* amacocian@yahoo.com
@@ -10,7 +10,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="FluentAssertions" Version="6.0.0-alpha0002" />
<PackageReference Include="FluentAssertions" Version="6.7.0" />
</ItemGroup>
<ItemGroup>
@@ -13,10 +13,10 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.2" PrivateAssets="all">
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.3.3" PrivateAssets="all">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.9.0" PrivateAssets="all" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.3.0" PrivateAssets="all" />
</ItemGroup>
<ItemGroup>
+12 -4
View File
@@ -1,9 +1,12 @@
using Microsoft.Extensions.Http.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Http.Logging;
using Microsoft.Extensions.Logging;
using Slim;
using Slim.Integration.ServiceCollection;
using System;
using System.Extensions;
using System.Http;
using System.Logging;
using System.Net.Http;
using System.Windows.Extensions;
using WpfExtended.Test;
@@ -21,8 +24,10 @@ namespace WpfExtended.Tests
Instance.Run();
}
protected override void SetupServiceManager(IServiceManager serviceManager)
protected override System.IServiceProvider SetupServiceProvider(IServiceCollection services)
{
var serviceManager = new ServiceManager();
serviceManager.RegisterResolver(new LoggerResolver());
serviceManager.RegisterDebugLoggerFactory();
serviceManager.RegisterResolver(
new HttpClientResolver()
@@ -34,6 +39,9 @@ namespace WpfExtended.Tests
return handler;
}));
serviceManager.RegisterOptionsManager();
var provider = services.BuildSlimServiceProvider(serviceManager);
return provider;
}
protected override void ApplicationClosing()
@@ -49,9 +57,9 @@ namespace WpfExtended.Tests
return false;
}
protected override void RegisterServices(IServiceProducer serviceProducer)
protected override void RegisterServices(IServiceCollection services)
{
serviceProducer.RegisterSingleton<IDummyService, DummyService>();
services.AddSingleton<IDummyService, DummyService>();
}
}
}
+3 -3
View File
@@ -11,9 +11,9 @@
<PackageReference Include="FlaUI.UIA3" Version="3.2.0" />
<PackageReference Include="FluentAssertions" Version="6.7.0" />
<PackageReference Include="Microsoft.Extensions.Http" Version="6.0.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.2.0" />
<PackageReference Include="Microsoft.TestPlatform" Version="17.2.0" />
<PackageReference Include="Microsoft.TestPlatform.TestHost" Version="17.2.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.3.1" />
<PackageReference Include="Microsoft.TestPlatform" Version="17.3.1" />
<PackageReference Include="Microsoft.TestPlatform.TestHost" Version="17.3.1" />
<PackageReference Include="Moq" Version="4.18.2" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.10" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.10" />
+28 -20
View File
@@ -1,5 +1,7 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Slim;
using Slim.Integration.ServiceCollection;
using System.Extensions;
using System.Logging;
using System.Threading.Tasks;
@@ -14,21 +16,28 @@ namespace System.Windows.Extensions
public abstract class ExtendedApplication<T> : Application
where T : Window
{
protected IServiceManager ServiceManager { get; } = new ServiceManager();
protected ILoggerFactory LoggerFactory { get; private set; }
private readonly ServiceCollection services = new();
protected IServiceProvider ServiceProvider { get; private set; }
public ExtendedApplication()
{
this.RegisterInternals();
}
/// <summary>
/// Do some work on the <see cref="IServiceManager"/> before calling <see cref="RegisterServices(IServiceProducer)"/>.
/// Create a new <see cref="IServiceProvider"/>.
/// </summary>
protected virtual void SetupServiceManager(IServiceManager serviceManager)
protected virtual IServiceProvider SetupServiceProvider(IServiceCollection services)
{
serviceManager.RegisterDebugLoggerFactory();
serviceManager.RegisterHttpFactory();
var serviceProvider = services.BuildSlimServiceProvider();
if (serviceProvider is IServiceManager serviceManager)
{
serviceManager.RegisterDebugLoggerFactory();
serviceManager.RegisterHttpFactory();
serviceManager.RegisterResolver(new LoggerResolver());
}
return serviceProvider;
}
/// <summary>
@@ -40,10 +49,10 @@ namespace System.Windows.Extensions
/// </summary>
protected abstract void ApplicationClosing();
/// <summary>
/// Register services into the <see cref="IServiceProducer"/>.
/// Register services into the <see cref="IServiceCollection"/>.
/// </summary>
/// <param name="serviceProducer"></param>
protected abstract void RegisterServices(IServiceProducer serviceProducer);
/// <param name="serviceCollection"></param>
protected abstract void RegisterServices(IServiceCollection services);
/// <summary>
/// Handle a caught exception.
/// </summary>
@@ -54,17 +63,18 @@ namespace System.Windows.Extensions
protected sealed override void OnStartup(StartupEventArgs e)
{
this.SetupExceptionHandling();
this.SetupServiceManager(this.ServiceManager);
this.RegisterServices(this.ServiceManager);
this.RegisterInternals();
this.RegisterServices(this.services);
this.ServiceProvider = this.SetupServiceProvider(this.services);
this.SetupApplicationLifetime();
this.LaunchWindow();
}
protected sealed override void OnExit(ExitEventArgs e)
{
base.OnExit(e);
foreach (var service in this.ServiceManager.GetServicesOfType<IApplicationLifetimeService>())
foreach (var service in this.ServiceProvider.GetServices<IApplicationLifetimeService>())
{
service.OnClosing();
service?.OnClosing();
}
this.ApplicationClosing();
@@ -77,9 +87,9 @@ namespace System.Windows.Extensions
private void LaunchWindow()
{
var window = this.ServiceManager.GetService<T>();
var window = this.ServiceProvider.GetRequiredService<T>();
this.ApplicationStarting();
foreach(var service in this.ServiceManager.GetServicesOfType<IApplicationLifetimeService>())
foreach(var service in this.ServiceProvider.GetServices<IApplicationLifetimeService>())
{
service.OnStartup();
}
@@ -88,9 +98,7 @@ namespace System.Windows.Extensions
}
private void RegisterInternals()
{
this.ServiceManager.RegisterServiceManager();
this.ServiceManager.RegisterSingleton<T, T>();
this.ServiceManager.RegisterResolver(new LoggerResolver());
this.services.AddSingleton<T, T>();
}
private void SetupExceptionHandling()
{
+4 -3
View File
@@ -6,7 +6,7 @@
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>
<PackageLicenseFile>License.txt</PackageLicenseFile>
<Version>0.6.2</Version>
<Version>0.7</Version>
<LangVersion>latest</LangVersion>
<Description>Extension library for Windows Presentation Platform.
@@ -86,9 +86,10 @@ http://www.java2s.com/Open-Source/CSharp_Free_Code/Windows_Presentation_Foundati
<PackageReference Include="Microsoft.CorrelationVector" Version="1.0.42" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0" />
<PackageReference Include="Slim" Version="1.7.3" />
<PackageReference Include="Slim" Version="1.9.1" />
<PackageReference Include="Slim.Integration" Version="1.0.3" />
<PackageReference Include="SystemExtensions.NetStandard" Version="1.5.0" />
<PackageReference Include="SystemExtensions.NetStandard.DependencyInjection" Version="1.1.8" />
<PackageReference Include="SystemExtensions.NetStandard.DependencyInjection" Version="1.2.1" />
</ItemGroup>
<Import Project="ShaderCompiler.target" />
</Project>