public IManagerHandler Find(Type behaviourType, IBehaviourManager manager = null) { var behaviour = typeof(Behaviour); while (behaviour.IsAssignableFrom(behaviourType)) { IManagerHandler handler = null; if (TryGetByBehaviour(behaviourType, out handler) && (manager == null || handler.Manager == manager)) { return(handler); } behaviourType = behaviourType.BaseType; } return(null); }
public void Add(IBehaviourManager manager) { var managerType = manager.GetType(); managers.Add(manager); byType[managerType] = manager; foreach (var type in manager.GetManagedTypes()) { IManagerHandler handler = null; if (!byBehaviour.TryGetValue(type, out handler)) { var handlerType = typeof(ManagerHandler <>).MakeGenericType(type); handler = Activator.CreateInstance(handlerType) as IManagerHandler; byBehaviour[type] = handler; } handler.Manager = manager; } CatagoriseManager(manager); }
public ManagerBinding(IManagerHandler handler, Type managedAs) { Contract.Requires(handler != null); Contract.Requires(managedAs != null); _handler = handler; _managedAs = managedAs; }
public bool TryGetByBehaviour(Type behaviourType, out IManagerHandler manager) { return(byBehaviour.TryGetValue(behaviourType, out manager)); }