У меня есть два типа POCO, A и B. У меня есть репозиторий для каждого, Rep <A
> и Rep <B
>, оба из которых реализуют IRep <A
> и IRep <B
>, обслуживаемыеконтейнер IoC (в данном случае AutoFac).
Существует несколько типов репозиториев: загрузка по требованию из БД (или что-то еще), отложенные коллекции в памяти, кэшированные результаты веб-службы,и т.д. Абоненты не могут отличить.И Rep <A
>, и Rep <B
> оказываются коллекциями в памяти, поскольку A и B не сильно меняются и живут долго.
Одним из свойств B является AЧто я делаю сейчас, когда B запрашивает свой A, B получает IRep <A
>, чтобы найти свой A и возвращает его.Он делает это каждый раз - каждый запрос для B's A включает IRep <A
>. Find ().Положительным моментом является то, что B никогда не удерживает A, и каждый запрос учитывает, каким бы ни было состояние Rep.Недостатком является большой IoC / IRep <A
> отток.
Я думаю об использовании здесь паттерна Lazy <T
>, чтобы B однажды спросил IRep <A
> и удержал то, что онполучил.Но что произойдет, если A будет удален из своего хранилища?
Я ищу чистый способ для Rep <A
> уведомить любого, кто заинтересован, когда он изменился.В моем примере некоторые B могут быть удалены, поэтому я бы хотел, чтобы Rep <A
> вызывал событие, когда что-то было удалено или добавлено и т. Д. Rep <B
> может подписаться на это событие, чтобы очистить любые Bкоторые относятся к А, которые сейчас ушли, и т. д. Как подключить это?
В идеале ничего не меняется при создании Rep <A
>.Он не должен знать, кто его слушает, и А можно манипулировать весь день, даже не запуская Реп.
Но когда рождается Реп <B
>, ему нужен способ подписаться на Реп <A
>событиеВозможно, еще нет живого представителя <A
>, но, безусловно, будет один раз, когда у B будет запрошен его A, так что вполне нормально запустить Rep <A
>.
В сущности,когда создается Rep <B
>, он хочет зарегистрировать себя в Rep <A
> для уведомления о событии.Я не хочу загрязнять интерфейс IRep <T
>, потому что это не должно иметь значения для всех, кто находится за пределами уровня репозитория.И другим типам репозиториев, возможно, вообще не придется беспокоиться об этом.
Имеет ли это какой-то смысл?