Skip to content
Draft
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
34 changes: 34 additions & 0 deletions src/Uno.Extensions.Hosting.UI.Tests/HostBuilderTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
using System;
using System.IO;
using System.Text.Json;
using FluentAssertions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace Uno.Extensions.Hosting.Tests;

[TestClass]
public class HostBuilderTests
{
[TestMethod]
public void After_Build_ILoggerFactory_Is_AmbientLogger()
{
var originalAmbientLoggerFactory = Uno.Extensions.LogExtensionPoint.AmbientLoggerFactory;
try
{
var myLoggerFactory = new LoggerFactory();
Uno.Extensions.LogExtensionPoint.AmbientLoggerFactory = myLoggerFactory;
var hostBuilder = new HostBuilder();
var host = hostBuilder.Build();
var serviceLoggerFactory = host.Services.GetService<ILoggerFactory>();
serviceLoggerFactory.Should().NotBeNull();
serviceLoggerFactory.Should().Be(myLoggerFactory);
}
finally
{
Uno.Extensions.LogExtensionPoint.AmbientLoggerFactory = originalAmbientLoggerFactory;
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<Project Sdk="Uno.Sdk">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<IsPackable>false</IsPackable>
<Nullable>disable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\Uno.Extensions.Hosting.UI\Uno.Extensions.Hosting.WinUI.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Moq" />
<PackageReference Include="MSTest.TestAdapter" />
<PackageReference Include="MSTest.TestFramework" />
<PackageReference Include="Microsoft.NET.Test.Sdk" />
<PackageReference Include="FluentAssertions" />
</ItemGroup>

</Project>
8 changes: 8 additions & 0 deletions src/Uno.Extensions.Hosting.UI/HostBuilder.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
// Marking as auto-generated to prevent StyleCop including this file - Taken from Microsoft.Extensions.Hosting
// <auto-generated />

using Microsoft.Extensions.DependencyInjection.Extensions;

namespace Uno.Extensions.Hosting;

/// <inheritdoc cref="IHostBuilder" />
Expand Down Expand Up @@ -241,6 +243,12 @@ private void CreateServiceProvider()
//services.AddOptions().Configure<HostOptions>(options => { options.Initialize(_hostConfiguration); });
services.AddLogging();

var ambientFactory = Uno.Extensions.LogExtensionPoint.AmbientLoggerFactory;
if (ambientFactory is not null)
{
services.Replace(ServiceDescriptor.Singleton(typeof(ILoggerFactory), ambientFactory));
}

foreach (Action<HostBuilderContext, IServiceCollection> configureServicesAction in _configureServicesActions)
{
configureServicesAction(_hostBuilderContext!, services);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Hosting" />
<PackageReference Include="Uno.Core.Extensions.Logging.Singleton" />
</ItemGroup>

<ItemGroup Condition="'$(IsBrowserWasm)'!='true'">
Expand Down
6 changes: 6 additions & 0 deletions src/Uno.Extensions.Logging/HostBuilderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,11 +48,17 @@
this IHostBuilder hostBuilder,
Action<HostBuilderContext, ILoggingBuilder>? configure = default, bool enableUnoLogging = false)
{
bool ambientLoggerExists = Uno.Extensions.LogExtensionPoint.AmbientLoggerFactory != null;
return hostBuilder
.ConfigureLogging((context, builder) =>
{
if (!context.IsRegistered(nameof(UseLogging)))
{
if (ambientLoggerExists)
{
typeof(HostBuilderExtensions).Log().LogWarning($"Uno.Extensions.LogExtensionPoint.AmbientLoggerFactory already configured; ignoring this .UseLogging() invocation.");

Check failure on line 59 in src/Uno.Extensions.Logging/HostBuilderExtensions.cs

View workflow job for this annotation

GitHub Actions / Build and Deploy Job

The type 'HostBuilderExtensions' in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs' conflicts with the imported type 'HostBuilderExtensions' in 'Uno.Extensions.Hosting, Version=7.2.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs'.

Check failure on line 59 in src/Uno.Extensions.Logging/HostBuilderExtensions.cs

View workflow job for this annotation

GitHub Actions / Build and Deploy Job

The type 'HostBuilderExtensions' in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs' conflicts with the imported type 'HostBuilderExtensions' in 'Uno.Extensions.Hosting, Version=7.2.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs'.

Check failure on line 59 in src/Uno.Extensions.Logging/HostBuilderExtensions.cs

View workflow job for this annotation

GitHub Actions / Build and Deploy Job

The type 'HostBuilderExtensions' in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs' conflicts with the imported type 'HostBuilderExtensions' in 'Uno.Extensions.Hosting, Version=7.2.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs'.

Check failure on line 59 in src/Uno.Extensions.Logging/HostBuilderExtensions.cs

View workflow job for this annotation

GitHub Actions / Build and Deploy Job

The type 'HostBuilderExtensions' in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs' conflicts with the imported type 'HostBuilderExtensions' in 'Uno.Extensions.Hosting, Version=7.2.0.0, Culture=neutral, PublicKeyToken=null'. Using the type defined in '/__w/uno.extensions/uno.extensions/src/Uno.Extensions.Logging/HostBuilderExtensions.cs'.
return;
}
#if __IOS__
#pragma warning disable CA1416 // Validate platform compatibility: The net8.0 version is not used on older versions of OS
builder.AddProvider(new global::Uno.Extensions.Logging.OSLogLoggerProvider());
Expand Down
Loading