Пример #1
0
        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)));
        }
Пример #2
0
 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();
 }
Пример #3
0
        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);
        }
Пример #4
0
        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
        }
Пример #6
0
 public void Bind(EventInvokers master)
 {
     eventInvoker.Bind(master);
 }