public TimetablePartHandler(IRepository<TimetablePartRecord> repository, IWorkContextAccessor workContextAccessor, IEnumerable<IHomePageProvider> homePageProviders, ITimetableSlugConstraint TimetableSlugConstraint) {
            _workContextAccessor = workContextAccessor;
            _TimetableSlugConstraint = TimetableSlugConstraint;
            _routableHomePageProvider = homePageProviders.SingleOrDefault(p => p.GetProviderName() == RoutableHomePageProvider.Name);
            Filters.Add(StorageFilter.For(repository));

            Action<PublishContentContext, RoutePart> publishedHandler = (context, route) => {
                if (route.Is<TimetablePart>()) {
                    if (route.ContentItem.Id != 0 && route.PromoteToHomePage)
                        _TimetableSlugConstraint.AddSlug("");
                }
                else if (route.ContentItem.Id != 0 && route.PromoteToHomePage) {
                    _TimetableSlugConstraint.RemoveSlug("");
                }
            };

            OnPublished<RoutePart>(publishedHandler);
            OnUnpublished<RoutePart>(publishedHandler);

            OnGetDisplayShape<TimetablePart>((context, Timetable) => {
                context.Shape.Description = Timetable.Description;
                context.Shape.AppointmentCount = Timetable.AppointmentCount;
            });
        }