Event binding system update

This commit is contained in:
2025-05-07 09:55:15 +03:00
parent 2f65fb24c0
commit bc74a97b14
3 changed files with 22 additions and 6 deletions
+1 -3
View File
@@ -213,9 +213,7 @@ namespace mROA.Cbor
if (obj is IShared) if (obj is IShared)
{ {
var interfaces = obj.GetType().GetInterfaces(); var sharedShell = typeof(SharedObjectShellShell<object>);
var generic = interfaces.FirstOrDefault(i => typeof(IShared).IsAssignableFrom(i));
var sharedShell = typeof(SharedObjectShellShell<>).MakeGenericType(generic);
var so = var so =
Activator.CreateInstance(sharedShell, obj, context) as Activator.CreateInstance(sharedShell, obj, context) as
ISharedObjectShell; ISharedObjectShell;
+13 -1
View File
@@ -1,8 +1,20 @@
namespace mROA.Abstract namespace mROA.Abstract
{ {
public interface IEventBinder<T> public interface IEventBinder<T> : IEventBinder
{ {
public void BindEvents(T source, IEndPointContext context, public void BindEvents(T source, IEndPointContext context,
IRepresentationModuleProducer representationModuleProducer, int index); IRepresentationModuleProducer representationModuleProducer, int index);
void IEventBinder.BindEvents(object source, IEndPointContext context, IRepresentationModuleProducer representationModuleProducer,
int index)
{
BindEvents((T)source, context, representationModuleProducer, index);
}
}
public interface IEventBinder
{
public void BindEvents(object source, IEndPointContext context,
IRepresentationModuleProducer representationModuleProducer, int index);
} }
} }
@@ -32,9 +32,15 @@ namespace mROA.Implementation.Backend
public int ResisterObject<T>(object o, IEndPointContext context) public int ResisterObject<T>(object o, IEndPointContext context)
{ {
var last = _storage.Place(o); var last = _storage.Place(o);
var sharedType = typeof(IShared);
var interfaces = o.GetType().GetInterfaces();
var generic = interfaces.Where(i => sharedType.IsAssignableFrom(i) && i != sharedType)
.Select(i => typeof(IEventBinder<>).MakeGenericType(i));
var binder = EventBinders.OfType<IEventBinder<T>>().FirstOrDefault(); var binders = EventBinders.Where(i => generic.Any(g => g.IsAssignableFrom(i.GetType())));
binder?.BindEvents((T)o, context, _representationModuleProducer!, last); foreach (var binder in binders)
((IEventBinder)binder).BindEvents(o, context, _representationModuleProducer!, last);
return last; return last;
} }