From 9b069a348fee2feaa221c236ff66f31e834d6a4c Mon Sep 17 00:00:00 2001 From: Chris Pulman Date: Sun, 13 Jul 2025 00:06:35 +0100 Subject: [PATCH] Add RxDisposableRecord and update to .NET 9 Introduces RxDisposableRecord for disposable record support. Updates target frameworks in projects to .NET 9.0, and updates copyright years to 2025. Refactors ReactiveProperty to inherit from RxDisposableObject and improves subscription/disposal logic. --- .../Memory/DummyReactiveObject.cs | 2 +- .../Memory/DummyRxObject.cs | 2 +- .../Memory/ReactiveObjectMemoryBenchmark.cs | 2 +- .../Memory/RxObjectMemoryBenchmark.cs | 2 +- .../AsValuePerformanceBenchmark.cs | 2 +- .../ToPropertyPerformanceBenchmark.cs | 2 +- .../Program.cs | 2 +- .../ReactiveMarbles.Mvvm.Benchmarks.csproj | 2 +- .../AsLazyValueExtensionsTests.cs | 2 +- .../AsLazyValueTestObject.cs | 2 +- .../AsValueExtensionsTests.cs | 2 +- .../AsValueTestData.cs | 2 +- .../AsValueTestObject.cs | 2 +- .../ReactiveMarbles.Mvvm.Tests.csproj | 2 +- .../Mocks/ReactivePropertyVM.cs | 2 +- .../ReactiveProperty/ReactivePropertyTest.cs | 2 +- .../ReactiveProperty/TestEnum.cs | 2 +- .../RxObjectTestFixture.cs | 2 +- .../RxObjectTests.cs | 2 +- .../RxRecordTestFixture.cs | 2 +- .../RxRecordTests.cs | 2 +- .../ScheduledSubjectTests.cs | 2 +- src/ReactiveMarbles.Mvvm.Tests/TestObject.cs | 2 +- .../TestSequencer.cs | 2 +- src/ReactiveMarbles.Mvvm/AsValueExtensions.cs | 2 +- src/ReactiveMarbles.Mvvm/CoreRegistration.cs | 2 +- .../CoreRegistrationBuilder.cs | 2 +- .../DebugExceptionHandler.cs | 2 +- src/ReactiveMarbles.Mvvm/ICoreRegistration.cs | 2 +- src/ReactiveMarbles.Mvvm/ILoggable.cs | 2 +- src/ReactiveMarbles.Mvvm/IRxObject.cs | 2 +- .../IRxPropertyEventArgs.cs | 2 +- .../IRxPropertyEventArgsExtensions.cs | 2 +- src/ReactiveMarbles.Mvvm/IStateHandler.cs | 2 +- src/ReactiveMarbles.Mvvm/IStateHost.cs | 2 +- src/ReactiveMarbles.Mvvm/IThrownExceptions.cs | 2 +- src/ReactiveMarbles.Mvvm/IValueBinder.cs | 2 +- src/ReactiveMarbles.Mvvm/IsExternalInit.cs | 2 +- src/ReactiveMarbles.Mvvm/LazyValueBinder.cs | 2 +- src/ReactiveMarbles.Mvvm/LocatorExtensions.cs | 2 +- src/ReactiveMarbles.Mvvm/Notifications.cs | 2 +- .../ProxyScheduledSubject.cs | 2 +- .../ReactiveMarbles.Mvvm.csproj | 2 +- .../ReactiveProperty/IReactiveProperty.cs | 2 +- .../ReactiveProperty/ReactiveProperty.cs | 76 ++++++++++++------- .../ReactivePropertyMixins.cs | 2 +- .../SingletonDataErrorsChangedEventArgs.cs | 2 +- .../SingletonPropertyChangedEventArgs.cs | 2 +- .../RxDisposableObject.cs | 25 +++++- .../RxDisposableRecord.cs | 47 ++++++++++++ src/ReactiveMarbles.Mvvm/RxObject.cs | 4 +- .../RxPropertyChangedEventArgs.cs | 2 +- .../RxPropertyChangingEventArgs.cs | 2 +- src/ReactiveMarbles.Mvvm/RxRecord.cs | 2 +- .../UnhandledErrorException.cs | 2 +- src/ReactiveMarbles.Mvvm/ValueBinder.cs | 2 +- src/stylecop.json | 2 +- 57 files changed, 172 insertions(+), 86 deletions(-) create mode 100644 src/ReactiveMarbles.Mvvm/RxDisposableRecord.cs diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyReactiveObject.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyReactiveObject.cs index e864d53..29f07b4 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyReactiveObject.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyReactiveObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyRxObject.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyRxObject.cs index c144d41..ffe00b8 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyRxObject.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/DummyRxObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/ReactiveObjectMemoryBenchmark.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/ReactiveObjectMemoryBenchmark.cs index 1b4f590..b9da681 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/ReactiveObjectMemoryBenchmark.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/ReactiveObjectMemoryBenchmark.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/RxObjectMemoryBenchmark.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/RxObjectMemoryBenchmark.cs index 852520a..a800276 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/RxObjectMemoryBenchmark.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Memory/RxObjectMemoryBenchmark.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/AsValuePerformanceBenchmark.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/AsValuePerformanceBenchmark.cs index f0b15ae..a882e7b 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/AsValuePerformanceBenchmark.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/AsValuePerformanceBenchmark.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/ToPropertyPerformanceBenchmark.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/ToPropertyPerformanceBenchmark.cs index 8a9f0fc..46158e0 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/ToPropertyPerformanceBenchmark.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Performance/ToPropertyPerformanceBenchmark.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/Program.cs b/src/ReactiveMarbles.Mvvm.Benchmarks/Program.cs index ad2f76c..9b24784 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/Program.cs +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/Program.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Benchmarks/ReactiveMarbles.Mvvm.Benchmarks.csproj b/src/ReactiveMarbles.Mvvm.Benchmarks/ReactiveMarbles.Mvvm.Benchmarks.csproj index a290d3a..d49705b 100644 --- a/src/ReactiveMarbles.Mvvm.Benchmarks/ReactiveMarbles.Mvvm.Benchmarks.csproj +++ b/src/ReactiveMarbles.Mvvm.Benchmarks/ReactiveMarbles.Mvvm.Benchmarks.csproj @@ -1,7 +1,7 @@ - net6.0 + net9.0 enable Exe false diff --git a/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueExtensionsTests.cs b/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueExtensionsTests.cs index f860be3..f017c01 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueExtensionsTests.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueExtensionsTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueTestObject.cs b/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueTestObject.cs index 1301745..8b713bc 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueTestObject.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/AsLazyValueTestObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/AsValueExtensionsTests.cs b/src/ReactiveMarbles.Mvvm.Tests/AsValueExtensionsTests.cs index 3fa3f8b..8b0885d 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/AsValueExtensionsTests.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/AsValueExtensionsTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/AsValueTestData.cs b/src/ReactiveMarbles.Mvvm.Tests/AsValueTestData.cs index a3414cf..b26d755 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/AsValueTestData.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/AsValueTestData.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/AsValueTestObject.cs b/src/ReactiveMarbles.Mvvm.Tests/AsValueTestObject.cs index d251ad3..0620c73 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/AsValueTestObject.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/AsValueTestObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/ReactiveMarbles.Mvvm.Tests.csproj b/src/ReactiveMarbles.Mvvm.Tests/ReactiveMarbles.Mvvm.Tests.csproj index 45f4336..5ddffc7 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/ReactiveMarbles.Mvvm.Tests.csproj +++ b/src/ReactiveMarbles.Mvvm.Tests/ReactiveMarbles.Mvvm.Tests.csproj @@ -1,7 +1,7 @@ - net6.0 + net9.0 false preview enable diff --git a/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/Mocks/ReactivePropertyVM.cs b/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/Mocks/ReactivePropertyVM.cs index 0585c33..5c7a80e 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/Mocks/ReactivePropertyVM.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/Mocks/ReactivePropertyVM.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/ReactivePropertyTest.cs b/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/ReactivePropertyTest.cs index 21fc68f..162e46b 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/ReactivePropertyTest.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/ReactivePropertyTest.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/TestEnum.cs b/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/TestEnum.cs index fde1443..7cd39ba 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/TestEnum.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/ReactiveProperty/TestEnum.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/RxObjectTestFixture.cs b/src/ReactiveMarbles.Mvvm.Tests/RxObjectTestFixture.cs index 27f6ba4..c829809 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/RxObjectTestFixture.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/RxObjectTestFixture.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/RxObjectTests.cs b/src/ReactiveMarbles.Mvvm.Tests/RxObjectTests.cs index 8c3c97b..2097097 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/RxObjectTests.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/RxObjectTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/RxRecordTestFixture.cs b/src/ReactiveMarbles.Mvvm.Tests/RxRecordTestFixture.cs index 778ed47..9370036 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/RxRecordTestFixture.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/RxRecordTestFixture.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/RxRecordTests.cs b/src/ReactiveMarbles.Mvvm.Tests/RxRecordTests.cs index b06daa4..01e9d03 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/RxRecordTests.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/RxRecordTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/ScheduledSubjectTests.cs b/src/ReactiveMarbles.Mvvm.Tests/ScheduledSubjectTests.cs index 53f6e31..fdfb173 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/ScheduledSubjectTests.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/ScheduledSubjectTests.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/TestObject.cs b/src/ReactiveMarbles.Mvvm.Tests/TestObject.cs index 749a854..d711dc5 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/TestObject.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/TestObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm.Tests/TestSequencer.cs b/src/ReactiveMarbles.Mvvm.Tests/TestSequencer.cs index 4669e7a..bb825f2 100644 --- a/src/ReactiveMarbles.Mvvm.Tests/TestSequencer.cs +++ b/src/ReactiveMarbles.Mvvm.Tests/TestSequencer.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/AsValueExtensions.cs b/src/ReactiveMarbles.Mvvm/AsValueExtensions.cs index a410e8c..cd20ba5 100644 --- a/src/ReactiveMarbles.Mvvm/AsValueExtensions.cs +++ b/src/ReactiveMarbles.Mvvm/AsValueExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/CoreRegistration.cs b/src/ReactiveMarbles.Mvvm/CoreRegistration.cs index f3244c5..7b744f6 100644 --- a/src/ReactiveMarbles.Mvvm/CoreRegistration.cs +++ b/src/ReactiveMarbles.Mvvm/CoreRegistration.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/CoreRegistrationBuilder.cs b/src/ReactiveMarbles.Mvvm/CoreRegistrationBuilder.cs index 547f941..a858a9c 100644 --- a/src/ReactiveMarbles.Mvvm/CoreRegistrationBuilder.cs +++ b/src/ReactiveMarbles.Mvvm/CoreRegistrationBuilder.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/DebugExceptionHandler.cs b/src/ReactiveMarbles.Mvvm/DebugExceptionHandler.cs index 62a08f9..217d5e2 100644 --- a/src/ReactiveMarbles.Mvvm/DebugExceptionHandler.cs +++ b/src/ReactiveMarbles.Mvvm/DebugExceptionHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ICoreRegistration.cs b/src/ReactiveMarbles.Mvvm/ICoreRegistration.cs index 95e3bea..2caf694 100644 --- a/src/ReactiveMarbles.Mvvm/ICoreRegistration.cs +++ b/src/ReactiveMarbles.Mvvm/ICoreRegistration.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ILoggable.cs b/src/ReactiveMarbles.Mvvm/ILoggable.cs index 4421c53..a5da68e 100644 --- a/src/ReactiveMarbles.Mvvm/ILoggable.cs +++ b/src/ReactiveMarbles.Mvvm/ILoggable.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IRxObject.cs b/src/ReactiveMarbles.Mvvm/IRxObject.cs index 01df931..7eab27d 100644 --- a/src/ReactiveMarbles.Mvvm/IRxObject.cs +++ b/src/ReactiveMarbles.Mvvm/IRxObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgs.cs b/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgs.cs index 67ffe95..63a051d 100644 --- a/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgs.cs +++ b/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgs.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgsExtensions.cs b/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgsExtensions.cs index 72e5770..31c2853 100644 --- a/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgsExtensions.cs +++ b/src/ReactiveMarbles.Mvvm/IRxPropertyEventArgsExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IStateHandler.cs b/src/ReactiveMarbles.Mvvm/IStateHandler.cs index dee3787..a2d63e2 100644 --- a/src/ReactiveMarbles.Mvvm/IStateHandler.cs +++ b/src/ReactiveMarbles.Mvvm/IStateHandler.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IStateHost.cs b/src/ReactiveMarbles.Mvvm/IStateHost.cs index 80d74ac..be579b2 100644 --- a/src/ReactiveMarbles.Mvvm/IStateHost.cs +++ b/src/ReactiveMarbles.Mvvm/IStateHost.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IThrownExceptions.cs b/src/ReactiveMarbles.Mvvm/IThrownExceptions.cs index 39d1921..74ee20d 100644 --- a/src/ReactiveMarbles.Mvvm/IThrownExceptions.cs +++ b/src/ReactiveMarbles.Mvvm/IThrownExceptions.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IValueBinder.cs b/src/ReactiveMarbles.Mvvm/IValueBinder.cs index 0e6efc6..aa2d938 100644 --- a/src/ReactiveMarbles.Mvvm/IValueBinder.cs +++ b/src/ReactiveMarbles.Mvvm/IValueBinder.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/IsExternalInit.cs b/src/ReactiveMarbles.Mvvm/IsExternalInit.cs index 0eb595b..33f151c 100644 --- a/src/ReactiveMarbles.Mvvm/IsExternalInit.cs +++ b/src/ReactiveMarbles.Mvvm/IsExternalInit.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/LazyValueBinder.cs b/src/ReactiveMarbles.Mvvm/LazyValueBinder.cs index 16a8826..b0f44b5 100644 --- a/src/ReactiveMarbles.Mvvm/LazyValueBinder.cs +++ b/src/ReactiveMarbles.Mvvm/LazyValueBinder.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/LocatorExtensions.cs b/src/ReactiveMarbles.Mvvm/LocatorExtensions.cs index 24fdb8b..c61f724 100644 --- a/src/ReactiveMarbles.Mvvm/LocatorExtensions.cs +++ b/src/ReactiveMarbles.Mvvm/LocatorExtensions.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/Notifications.cs b/src/ReactiveMarbles.Mvvm/Notifications.cs index 6b9c7d2..fb89eca 100644 --- a/src/ReactiveMarbles.Mvvm/Notifications.cs +++ b/src/ReactiveMarbles.Mvvm/Notifications.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ProxyScheduledSubject.cs b/src/ReactiveMarbles.Mvvm/ProxyScheduledSubject.cs index b342c92..0088be9 100644 --- a/src/ReactiveMarbles.Mvvm/ProxyScheduledSubject.cs +++ b/src/ReactiveMarbles.Mvvm/ProxyScheduledSubject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ReactiveMarbles.Mvvm.csproj b/src/ReactiveMarbles.Mvvm/ReactiveMarbles.Mvvm.csproj index a902a08..2de6db3 100644 --- a/src/ReactiveMarbles.Mvvm/ReactiveMarbles.Mvvm.csproj +++ b/src/ReactiveMarbles.Mvvm/ReactiveMarbles.Mvvm.csproj @@ -1,7 +1,7 @@  - netstandard2.0;net6.0;net8.0 + netstandard2.0;net8.0;net9.0 latest A MVVM framework that integrates with the Reactive Extensions for .NET to create elegant, testable MVVM components that run on any mobile or desktop platform. This is the base package with the base platform implementations enable diff --git a/src/ReactiveMarbles.Mvvm/ReactiveProperty/IReactiveProperty.cs b/src/ReactiveMarbles.Mvvm/ReactiveProperty/IReactiveProperty.cs index 6f4429d..8c63f7e 100644 --- a/src/ReactiveMarbles.Mvvm/ReactiveProperty/IReactiveProperty.cs +++ b/src/ReactiveMarbles.Mvvm/ReactiveProperty/IReactiveProperty.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactiveProperty.cs b/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactiveProperty.cs index 40f66e3..4c13f36 100644 --- a/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactiveProperty.cs +++ b/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactiveProperty.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. @@ -26,10 +26,9 @@ namespace ReactiveMarbles.Mvvm; /// /// [DataContract] -public class ReactiveProperty : RxObject, IReactiveProperty +public class ReactiveProperty : RxDisposableObject, IReactiveProperty { private readonly IScheduler _scheduler; - private readonly CompositeDisposable _disposables = []; private readonly EqualityComparer _checkIf = EqualityComparer.Default; private readonly Subject _checkValidation = new(); private readonly Subject _valueRefereshed = new(); @@ -38,8 +37,10 @@ public class ReactiveProperty : RxObject, IReactiveProperty private readonly Lazy, IObservable>>> _validatorStore = new(() => []); private readonly int _skipCurrentValue; private readonly bool _isDistinctUntilChanged; + private IObservable? _observable; private T? _value; private IEnumerable? _currentErrors; + private bool _hasSubscribed; /// /// Initializes a new instance of the class. @@ -85,16 +86,12 @@ public ReactiveProperty(T? initialValue, IScheduler? scheduler, bool skipCurrent Value = initialValue; _scheduler = scheduler ?? TaskPoolScheduler.Default; _errorChanged = new Lazy>(() => new BehaviorSubject(GetErrors(null))); + GetSubscription(); } /// public event EventHandler? ErrorsChanged; - /// - /// Gets a value indicating whether gets a value that indicates whether the object is disposed. - /// - public bool IsDisposed => _disposables.IsDisposed; - /// /// Gets or sets the value. /// @@ -197,7 +194,7 @@ public ReactiveProperty AddValidationError(Func, IObservable< } _errorChanged.Value.OnNext(x); - }).DisposeWith(_disposables); + }).DisposeWith(Disposables); return this; } @@ -256,15 +253,6 @@ public ReactiveProperty AddValidationError(Func validator, public ReactiveProperty AddValidationError(Func validator, bool ignoreInitialError = false) => AddValidationError(xs => xs.Select(x => validator(x)), ignoreInitialError); - /// - /// Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. - /// - public void Dispose() - { - Dispose(true); - GC.SuppressFinalize(this); - } - /// /// Check validation. /// @@ -276,6 +264,7 @@ public void Dispose() public void Refresh() { SetValue(_value); + _valueRefereshed.OnNext(_value); RaisePropertyChanged(nameof(Value)); } @@ -303,23 +292,38 @@ public void Refresh() /// A reference to an interface that allows observers to stop receiving notifications before /// the provider has finished sending them. /// - public IDisposable Subscribe(IObserver observer) => - this.WhenValueChanged(vm => vm.Value) - .Merge(_valueRefereshed) - .Skip(_skipCurrentValue) - .ObserveOn(_scheduler) - .Subscribe(observer) - .DisposeWith(_disposables); + public IDisposable Subscribe(IObserver observer) + { + if (observer == null) + { + return Disposable.Empty; + } + + if (IsDisposed) + { + observer.OnCompleted(); + return Disposable.Empty; + } + + if (_hasSubscribed) + { + observer.OnNext(_value); + } + + _hasSubscribed = true; + + return _observable!.Subscribe(observer).DisposeWith(Disposables); + } /// /// Releases unmanaged and - optionally - managed resources. /// /// true to release both managed and unmanaged resources; false to release only unmanaged resources. - protected virtual void Dispose(bool disposing) + protected override void Dispose(bool disposing) { - if (_disposables?.IsDisposed == false && disposing) + base.Dispose(disposing); + if (!IsDisposed && disposing) { - _disposables?.Dispose(); _checkValidation.Dispose(); _valueRefereshed.Dispose(); _validationDisposable.Dispose(); @@ -339,4 +343,20 @@ private void SetValue(T? value) _checkValidation.OnNext(value); } } + + private void GetSubscription() + { + _observable = this.WhenValueChanged(vm => vm.Value) + .Skip(_skipCurrentValue); + + if (_isDistinctUntilChanged) + { + _observable = _observable.DistinctUntilChanged(); + } + + _observable = _observable.Merge(_valueRefereshed) + .Publish() + .RefCount() + .ObserveOn(_scheduler); + } } diff --git a/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactivePropertyMixins.cs b/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactivePropertyMixins.cs index 595f431..38f4a26 100644 --- a/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactivePropertyMixins.cs +++ b/src/ReactiveMarbles.Mvvm/ReactiveProperty/ReactivePropertyMixins.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonDataErrorsChangedEventArgs.cs b/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonDataErrorsChangedEventArgs.cs index e0acc68..3941bce 100644 --- a/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonDataErrorsChangedEventArgs.cs +++ b/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonDataErrorsChangedEventArgs.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonPropertyChangedEventArgs.cs b/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonPropertyChangedEventArgs.cs index 1953521..5d9967a 100644 --- a/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonPropertyChangedEventArgs.cs +++ b/src/ReactiveMarbles.Mvvm/ReactiveProperty/SingletonPropertyChangedEventArgs.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/RxDisposableObject.cs b/src/ReactiveMarbles.Mvvm/RxDisposableObject.cs index 9ce8486..134722b 100644 --- a/src/ReactiveMarbles.Mvvm/RxDisposableObject.cs +++ b/src/ReactiveMarbles.Mvvm/RxDisposableObject.cs @@ -1,16 +1,31 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. using System; +using System.Reactive.Disposables; namespace ReactiveMarbles.Mvvm; /// /// Rx object that extends the interface. /// -public class RxDisposableObject : RxObject, IDisposable +public class RxDisposableObject : RxObject, ICancelable { + /// + /// Gets a value indicating whether this instance is disposed. + /// + /// true if this instance is disposed; otherwise, false. + public bool IsDisposed => Disposables.IsDisposed; + + /// + /// Gets the disposables. + /// + /// + /// The disposables. + /// + protected CompositeDisposable Disposables { get; } = []; + /// public void Dispose() { @@ -24,5 +39,9 @@ public void Dispose() /// Disposing. protected virtual void Dispose(bool disposing) { + if (disposing && !IsDisposed) + { + Disposables.Dispose(); + } } -} \ No newline at end of file +} diff --git a/src/ReactiveMarbles.Mvvm/RxDisposableRecord.cs b/src/ReactiveMarbles.Mvvm/RxDisposableRecord.cs new file mode 100644 index 0000000..81f2ce6 --- /dev/null +++ b/src/ReactiveMarbles.Mvvm/RxDisposableRecord.cs @@ -0,0 +1,47 @@ +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. +// ReactiveUI Association Incorporated licenses this file to you under the MIT license. +// See the LICENSE file in the project root for full license information. + +using System; +using System.Reactive.Disposables; + +namespace ReactiveMarbles.Mvvm; + +/// +/// Rx object that extends the interface. +/// +public record RxDisposableRecord : RxRecord, ICancelable +{ + /// + /// Gets a value indicating whether this instance is disposed. + /// + /// true if this instance is disposed; otherwise, false. + public bool IsDisposed => Disposables.IsDisposed; + + /// + /// Gets the disposables. + /// + /// + /// The disposables. + /// + protected CompositeDisposable Disposables { get; } = []; + + /// + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + /// + /// Disposes of the resources. + /// + /// Disposing. + protected virtual void Dispose(bool disposing) + { + if (disposing && !IsDisposed) + { + Disposables.Dispose(); + } + } +} diff --git a/src/ReactiveMarbles.Mvvm/RxObject.cs b/src/ReactiveMarbles.Mvvm/RxObject.cs index ae2e011..837f6a6 100644 --- a/src/ReactiveMarbles.Mvvm/RxObject.cs +++ b/src/ReactiveMarbles.Mvvm/RxObject.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. @@ -29,7 +29,7 @@ public class RxObject : IRxObject private readonly Lazy> _thrownExceptions = new( () => new ProxyScheduledSubject(Scheduler.Immediate, ServiceLocator.Current().GetService().ExceptionHandler), LazyThreadSafetyMode.PublicationOnly); - private readonly Lazy _notification = new(() => new Notifications()); + private readonly Lazy _notification = new(() => new()); /// /// Initializes a new instance of the class. diff --git a/src/ReactiveMarbles.Mvvm/RxPropertyChangedEventArgs.cs b/src/ReactiveMarbles.Mvvm/RxPropertyChangedEventArgs.cs index c1b57f7..4362cb1 100644 --- a/src/ReactiveMarbles.Mvvm/RxPropertyChangedEventArgs.cs +++ b/src/ReactiveMarbles.Mvvm/RxPropertyChangedEventArgs.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/RxPropertyChangingEventArgs.cs b/src/ReactiveMarbles.Mvvm/RxPropertyChangingEventArgs.cs index 6f62f65..6ac2ad4 100644 --- a/src/ReactiveMarbles.Mvvm/RxPropertyChangingEventArgs.cs +++ b/src/ReactiveMarbles.Mvvm/RxPropertyChangingEventArgs.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/RxRecord.cs b/src/ReactiveMarbles.Mvvm/RxRecord.cs index a71cc7a..fbdf68a 100644 --- a/src/ReactiveMarbles.Mvvm/RxRecord.cs +++ b/src/ReactiveMarbles.Mvvm/RxRecord.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/UnhandledErrorException.cs b/src/ReactiveMarbles.Mvvm/UnhandledErrorException.cs index ca9debc..1cb44c3 100644 --- a/src/ReactiveMarbles.Mvvm/UnhandledErrorException.cs +++ b/src/ReactiveMarbles.Mvvm/UnhandledErrorException.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/ReactiveMarbles.Mvvm/ValueBinder.cs b/src/ReactiveMarbles.Mvvm/ValueBinder.cs index 036760c..99d0d3c 100644 --- a/src/ReactiveMarbles.Mvvm/ValueBinder.cs +++ b/src/ReactiveMarbles.Mvvm/ValueBinder.cs @@ -1,4 +1,4 @@ -// Copyright (c) 2019-2024 ReactiveUI Association Incorporated. All rights reserved. +// Copyright (c) 2019-2025 ReactiveUI Association Incorporated. All rights reserved. // ReactiveUI Association Incorporated licenses this file to you under the MIT license. // See the LICENSE file in the project root for full license information. diff --git a/src/stylecop.json b/src/stylecop.json index e2808f2..85e9732 100644 --- a/src/stylecop.json +++ b/src/stylecop.json @@ -13,7 +13,7 @@ "documentPrivateFields": false, "documentationCulture": "en-US", "companyName": "ReactiveUI Association Incorporated", - "copyrightText": "Copyright (c) 2019-2024 {companyName}. All rights reserved.\n{companyName} licenses this file to you under the {licenseName} license.\nSee the {licenseFile} file in the project root for full license information.", + "copyrightText": "Copyright (c) 2019-2025 {companyName}. All rights reserved.\n{companyName} licenses this file to you under the {licenseName} license.\nSee the {licenseFile} file in the project root for full license information.", "variables": { "licenseName": "MIT", "licenseFile": "LICENSE"