private void EntityComponentRequested(object sender, ComponentRequestEventArgs e) { MethodInfo method = cacheManager.GetType().GetMethod(nameof(CacheManager.GetItemFromCache)); method = method.MakeGenericMethod(e.RequestedType); e.SetComponent((IComponent)method.Invoke(cacheManager, Array.Empty <object>())); }
public void AddComponent <ComponentType>() where ComponentType : class, IComponent, new() { Type type = typeof(ComponentType); ComponentRequestEventArgs args; if (components.ContainsKey(type)) { throw new ArgumentException($"Component with type \"{type.Name}\" already exists.", nameof(ComponentType)); } args = new ComponentRequestEventArgs(typeof(ComponentType)); ComponentRequested?.Invoke(this, args); components.Add(type, args.Component); ComponentAdded?.Invoke(this, args); }