public T Generate <T>(params object[] partDefinitions) where T : class { partDefinitions = partDefinitions.Concat(GeneralPartDefinitions).ToArray(); EventInvokers eventInvokers = new EventInvokers(); return(Create <T>(partDefinitions, Array.Empty <object>(), eventInvokers, new WrapperFactories <T>(WrapperGenerator <T> .CreateAndCheckWrappers(partDefinitions), eventInvokers))); }
public WrapperFactories(IList <object> wrappers, EventInvokers eventInvokers) { interceptorMaps = new PropertiesFactory(wrappers.OfType <PropertyDefinition>()) .Concat(new MethodsFactory(wrappers.OfType <Method>())) .Concat(new EventsFactory <T>(eventInvokers)) .SelectMany(provider => provider.GetInterceptorMaps <T>()) .Where(map => map.Item1 != null) .ToArray(); }
internal T Create <T>(object[] partDefinitions, object[] parameters, EventInvokers eventInvokers, IEnumerable <InterceptorMap> wrapperFactories) where T : class { InstanceContainer <T> instanceContainer = new InstanceContainer <T>(partDefinitions, parameters, eventInvokers, wrapperFactories); IInterceptor interceptor = instanceContainer.MasterInterceptor; T target = typeof(T).IsInterface ? generator.CreateInterfaceProxyWithoutTarget <T>(interceptor) : generator.CreateClassProxy <T>(interceptor); instanceContainer.Bind(target); generatedEventInvokers.Add(new WeakReference(target), eventInvokers); return(target); }
public InstanceContainer(object[] partDefinitions, object[] parameters, EventInvokers eventInvokers, IEnumerable <InterceptorMap> wrapperFactories) { MasterInterceptor = new MasterInterceptor( new InstanceMap(partDefinitions, parameters), wrapperFactories); EventInvokersBinding eventInvokersBinding = new EventInvokersBinding(this, eventInvokers); objectProviderHandler = new ObjectProviderHandler( partDefinitions .Append(new TargetBindingParent(this)) .Append(eventInvokersBinding) .Append(MasterInterceptor)); }
public override void Invoke(object system, object args) { if (gameEvent != null) { gameEvent((E)args); } #if UNITY_EDITOR if (EventInvokers.Count >= 10) { EventInvokers.Dequeue(); } EventInvokers.Enqueue(new EventInvoker() { invoker = system, frame = Time.frameCount }); #endif }
public void Bind(EventInvokers master) { eventInvoker.Bind(master); }