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)
|
||||
{
|
||||
|
||||
@@ -8,9 +8,8 @@ public static class ObjectExtensions
|
||||
{
|
||||
Type type = obj.GetType();
|
||||
|
||||
object? key = selector();
|
||||
if (type.GetProperty($"{key}") is PropertyInfo property
|
||||
&& property.GetValue(obj) is { } value)
|
||||
object? key = selector();
|
||||
if (type.GetProperty($"{key}") is PropertyInfo property && property.GetValue(obj) is { } value)
|
||||
{
|
||||
return value;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -120,7 +120,14 @@ public class Subscription(SubscriptionCollection subscriptions,
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user