Merge remote-tracking branch 'origin/Untrusted' into Untrusted
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -33,8 +33,14 @@ namespace mROA.Implementation.Backend
|
|||||||
{
|
{
|
||||||
var last = _storage.Place(o);
|
var last = _storage.Place(o);
|
||||||
|
|
||||||
var binder = EventBinders.OfType<IEventBinder<T>>().FirstOrDefault();
|
var sharedType = typeof(IShared);
|
||||||
binder?.BindEvents((T)o, context, _representationModuleProducer!, last);
|
var interfaces = o.GetType().GetInterfaces();
|
||||||
|
var generic = interfaces.Where(i => sharedType.IsAssignableFrom(i) && i != sharedType)
|
||||||
|
.Select(i => typeof(IEventBinder<>).MakeGenericType(i));
|
||||||
|
|
||||||
|
var binders = EventBinders.Where(i => generic.Any(g => g.IsAssignableFrom(i.GetType())));
|
||||||
|
foreach (var binder in binders)
|
||||||
|
((IEventBinder)binder).BindEvents(o, context, _representationModuleProducer!, last);
|
||||||
|
|
||||||
return last;
|
return last;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user