Allow subscription keys to be resolved by reflection

This commit is contained in:
TheXamlGuy
2024-06-02 18:48:51 +01:00
parent 48b33416c9
commit 1a0d750f02
4 changed files with 26 additions and 13 deletions
+1 -1
View File
@@ -32,7 +32,7 @@ public class Mediator(IHandlerProvider handlerProvider,
} }
} }
foreach (object? handler in handlerProvider.Get(messageType)) foreach (object? handler in handlerProvider.Get(messageType, key))
{ {
if (handler is not null) if (handler is not null)
{ {
+1 -2
View File
@@ -9,8 +9,7 @@ public static class ObjectExtensions
Type type = obj.GetType(); Type type = obj.GetType();
object? key = selector(); object? key = selector();
if (type.GetProperty($"{key}") is PropertyInfo property if (type.GetProperty($"{key}") is PropertyInfo property && property.GetValue(obj) is { } value)
&& property.GetValue(obj) is { } value)
{ {
return value; return value;
} }
+15 -8
View File
@@ -120,17 +120,24 @@ public partial class Observable<TValue>(IServiceProvider provider,
private TValue? value = value; private TValue? value = value;
} }
public partial class Observable<TKey, TValue>(IServiceProvider provider, public partial class Observable<TKey, TValue> : Observable
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer,
TValue? value = default) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
{ {
[ObservableProperty] [ObservableProperty]
private TKey? key; private TKey? key;
[ObservableProperty] [ObservableProperty]
private TValue? value = value; private TValue? value;
public Observable(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer,
TKey? key = default,
TValue? value = default) : base(provider, factory, mediator, publisher, subscriber, disposer)
{
Key = key;
Value = value;
}
} }
+8 -1
View File
@@ -120,7 +120,14 @@ public class Subscription(SubscriptionCollection subscriptions,
keys[attribute.Type] = value; keys[attribute.Type] = value;
} }
value.Add(attribute.Key); if (subscriber.GetPropertyValue(() => attribute.Key) is object key)
{
value.Add(key);
}
else
{
value.Add(attribute.Key);
}
} }
return keys; return keys;