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