Я бы сказал, да, если вы собираетесь использовать фактический шаблон репозитория Фаулера.Этот шаблон призван стать посредником между бизнес-уровнями и уровнями данных, предоставляя интерфейс , подобный .Он не был предназначен для хранения данных.Тем не менее, если вы просто хотите создать коллекцию, которая оборачивает API и предоставляет события, когда все меняется, делайте это во что бы то ни стало.Иногда вам не нужно следовать предопределенному шаблону.
Если вы хотите, чтобы это был шаблон, я бы сказал, что он больше похож на шаблон Object Pool или Observer.Рассмотрим случай IObservable
с использованием Reactive Extensions (Rx) .Это позволит вам реагировать на уровень PInvoke и выполнять свои обязанности в будущем.Код на самом деле оказывается более эффективным, чем события.Используя события, вы должны поддерживать этот репозиторий, отслеживать время жизни объекта, возможно, сделать этот репозиторий одиночным и предоставить ему некоторое управление потоками.С Rx вы просто помещаете действие в очередь наблюдателя.
Но, в конце концов, используйте то, что кажется вам наиболее естественным.Шаблоны - это просто предложения, и они не всегда существуют для каждого потенциального варианта использования.Это один из таких случаев.