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)
{
+1 -2
View File
@@ -9,8 +9,7 @@ public static class ObjectExtensions
Type type = obj.GetType();
object? key = selector();
if (type.GetProperty($"{key}") is PropertyInfo property
&& property.GetValue(obj) is { } value)
if (type.GetProperty($"{key}") is PropertyInfo property && property.GetValue(obj) is { } value)
{
return value;
}
+15 -8
View File
@@ -120,17 +120,24 @@ public partial class Observable<TValue>(IServiceProvider provider,
private TValue? value = value;
}
public partial class Observable<TKey, TValue>(IServiceProvider provider,
IServiceFactory factory,
IMediator mediator,
IPublisher publisher,
ISubscription subscriber,
IDisposer disposer,
TValue? value = default) : Observable(provider, factory, mediator, publisher, subscriber, disposer)
public partial class Observable<TKey, TValue> : Observable
{
[ObservableProperty]
private TKey? key;
[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;
}
}
+7
View File
@@ -120,8 +120,15 @@ public class Subscription(SubscriptionCollection subscriptions,
keys[attribute.Type] = value;
}
if (subscriber.GetPropertyValue(() => attribute.Key) is object key)
{
value.Add(key);
}
else
{
value.Add(attribute.Key);
}
}
return keys;
}