Allow subscription keys to be resolved by reflection
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user