diff --git a/src/Avalonia.Base/Animation/Animation.cs b/src/Avalonia.Base/Animation/Animation.cs
index c5c76f4929..7c03c988f8 100644
--- a/src/Avalonia.Base/Animation/Animation.cs
+++ b/src/Avalonia.Base/Animation/Animation.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.Diagnostics.CodeAnalysis;
using System.Linq;
using System.Reactive.Disposables;
using System.Reactive.Linq;
@@ -199,10 +200,14 @@ namespace Avalonia.Animation
/// Sets the value of the Animator attached property for a setter.
///
/// The animation setter.
- public static void SetAnimator(IAnimationSetter setter)
- where TAnimator : IAnimator, new()
+ /// The property animator value.
+ public static void SetAnimator(IAnimationSetter setter,
+#if NET6_0_OR_GREATER
+ [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicParameterlessConstructor | DynamicallyAccessedMemberTypes.PublicMethods)]
+#endif
+ Type value)
{
- s_animators[setter] = (typeof(TAnimator), () => new TAnimator());
+ s_animators[setter] = (value, () => (IAnimator)Activator.CreateInstance(value)!);
}
private readonly static List<(Func Condition, Type Animator, Func Factory)> Animators = new()
diff --git a/src/Avalonia.Base/Avalonia.Base.csproj b/src/Avalonia.Base/Avalonia.Base.csproj
index 15feed388b..d091b9072d 100644
--- a/src/Avalonia.Base/Avalonia.Base.csproj
+++ b/src/Avalonia.Base/Avalonia.Base.csproj
@@ -6,6 +6,7 @@
True
true
$(BaseIntermediateOutputPath)\GeneratedFiles
+ true