mirror of
https://github.com/AlexMacocian/WpfExtended.git
synced 2026-07-15 14:59:30 +00:00
Integrate with Microsoft.Extensions.DependencyInjection (#12)
* Integrate with Microsoft.Extensions.DependencyInjection * Setup CODEOWNERS
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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>();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user