Skip to content
This repository was archived by the owner on May 1, 2024. It is now read-only.

Commit ff2b942

Browse files
Fix Singleton Pattern for LocalizationResourceManager (#919)
* Update LocalizationResourceManager.shared.cs * Implement Lazy Loading for Thread Safety * Fix Namespace * Removed changes from main branch * Revert Commit * Update LocalizationResourceManager.shared.cs * Fix Unit Tests * Add Collection to LocalizationResourceManagerTests The `Collection` attribute prevents these tests from running in parallel https://xunit.net/docs/running-tests-in-parallel.html
1 parent 5b8facc commit ff2b942

File tree

3 files changed

+12
-17
lines changed

3 files changed

+12
-17
lines changed

src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Helpers/LocalizationResourceManagerTests/LocalizationResourceManagerTests.cs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,18 @@
44
using Xamarin.CommunityToolkit.UnitTests.Mocks;
55
using Xunit;
66

7-
namespace Xamarin.CommunityToolkit.UnitTests.Helpers.WeakEventManagerTests
7+
namespace Xamarin.CommunityToolkit.UnitTests.Helpers.LocalizationResourceManagerTests
88
{
9+
[Collection(nameof(LocalizationResourceManager))]
910
public class LocalizationResourceManagerTests
1011
{
1112
public LocalizationResourceManagerTests()
1213
{
1314
resourceManager = new MockResourceManager();
14-
#pragma warning disable CS0618 // Type or member is obsolete
15-
localizationManager = new LocalizationResourceManager();
16-
#pragma warning restore CS0618 // Type or member is obsolete
1715
localizationManager.Init(resourceManager, initialCulture);
1816
}
1917

20-
readonly LocalizationResourceManager localizationManager;
18+
readonly LocalizationResourceManager localizationManager = LocalizationResourceManager.Current;
2119
readonly CultureInfo initialCulture = CultureInfo.InvariantCulture;
2220
readonly ResourceManager resourceManager;
2321

@@ -49,15 +47,15 @@ public void LocalizationResourceManager_PropertyChanged_Triggered()
4947
{
5048
// Arrange
5149
var culture2 = new CultureInfo("en");
52-
localizationManager.SetCulture(culture2);
50+
localizationManager.CurrentCulture = culture2;
5351
CultureInfo changedCulture = null;
5452
localizationManager.PropertyChanged += (s, e) => changedCulture = localizationManager.CurrentCulture;
5553

5654
// Act, Assert
5755
localizationManager.Init(resourceManager, initialCulture);
5856
Assert.Equal(initialCulture, changedCulture);
5957

60-
localizationManager.SetCulture(culture2);
58+
localizationManager.CurrentCulture = culture2;
6159
Assert.Equal(culture2, changedCulture);
6260
}
6361
}

src/CommunityToolkit/Xamarin.CommunityToolkit.UnitTests/Helpers/LocalizedStringTests/LocalizedStringTests.cs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,20 +7,19 @@
77

88
namespace Xamarin.CommunityToolkit.UnitTests.Helpers.LocalizedStringTests
99
{
10+
[Collection(nameof(LocalizationResourceManager))]
1011
public class LocalizedStringTests
1112
{
1213
public LocalizedStringTests()
1314
{
1415
resourceManager = new MockResourceManager();
15-
#pragma warning disable CS0618 // Type or member is obsolete
16-
localizationManager = new LocalizationResourceManager();
17-
#pragma warning restore CS0618 // Type or member is obsolete
1816
localizationManager.Init(resourceManager, initialCulture);
1917
}
2018

21-
readonly LocalizationResourceManager localizationManager;
19+
readonly LocalizationResourceManager localizationManager = LocalizationResourceManager.Current;
2220
readonly CultureInfo initialCulture = CultureInfo.InvariantCulture;
2321
readonly ResourceManager resourceManager;
22+
2423
LocalizedString localizedString;
2524

2625
[Fact]

src/CommunityToolkit/Xamarin.CommunityToolkit/Helpers/LocalizationResourceManager.shared.cs

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,14 @@ namespace Xamarin.CommunityToolkit.Helpers
1010
#if !NETSTANDARD1_0
1111
public class LocalizationResourceManager : ObservableObject
1212
{
13-
#pragma warning disable CS0618 // Type or member is obsolete
14-
public static LocalizationResourceManager Current { get; } = new LocalizationResourceManager();
15-
#pragma warning restore CS0618 // Type or member is obsolete
13+
static readonly Lazy<LocalizationResourceManager> currentHolder = new Lazy<LocalizationResourceManager>(() => new LocalizationResourceManager());
14+
15+
public static LocalizationResourceManager Current => currentHolder.Value;
1616

1717
ResourceManager resourceManager;
1818
CultureInfo currentCulture = Thread.CurrentThread.CurrentUICulture;
1919

20-
[Obsolete("Please use the Current property instead of creating a new instance of this class")]
21-
[EditorBrowsable(EditorBrowsableState.Never)]
22-
public LocalizationResourceManager()
20+
LocalizationResourceManager()
2321
{
2422
}
2523

0 commit comments

Comments
 (0)