none
Как подписаться на событие другой DLL в MEF RRS feed

Ответы

  • Использование MEF подразумевает, что библиотеки ничего не знают друг о друге. Поэтому любые подобные вещи должны быть где-то описаны. Например в базовой библиотеке должен быть определен соответствующий интерфейс, в котором объявлено нужное вам событие. В какой-то момент какая-то сущность будет запрашивать объект этого типа и подписываться на событие. DI контейнер будет отдавать нужный объект и вы будете подписываться на событие.

    Если же это какое-то абстрактное событие и вы хотите подписаться на него без каких-либо Dependency Injections, можно сделать статичный класс в базовой библиотеке, в котором будет происходить подписка на абстрактное событие по имени этого события и посылаться событие любым элементом. Например будет статичный класс PubSub, в котором определены методы Subscribe(string eventName, Action eventHandler) и SendEvent(string eventName). Внутри будет находиться Dictionary<string, List<Action>> , в котором будут храниться подписчики. SendEvent будет проходиться по всем подписчикам и вызывать переданый метод. А в методе Subscribe в коллекцию будет добавляться соответствующий handler. Но этот подход никак не связан с MEF.

    • Помечено в качестве ответа Abolmasov Dmitry 21 июня 2012 г. 11:41
    21 июня 2012 г. 7:10
    Отвечающий

Все ответы

  • Уважаемый пользователь!

    В вашей теме отсутствует активность в течение последних 5 дней. При отсутствии каких-либо действий в течение 2 последующих дней, тема будет переведена в разряд обсуждений. Вы можете возобновить дискуссию, просто оставив сообщение в данной теме


    Для связи [mail]

    19 июня 2012 г. 8:11
  • Использование MEF подразумевает, что библиотеки ничего не знают друг о друге. Поэтому любые подобные вещи должны быть где-то описаны. Например в базовой библиотеке должен быть определен соответствующий интерфейс, в котором объявлено нужное вам событие. В какой-то момент какая-то сущность будет запрашивать объект этого типа и подписываться на событие. DI контейнер будет отдавать нужный объект и вы будете подписываться на событие.

    Если же это какое-то абстрактное событие и вы хотите подписаться на него без каких-либо Dependency Injections, можно сделать статичный класс в базовой библиотеке, в котором будет происходить подписка на абстрактное событие по имени этого события и посылаться событие любым элементом. Например будет статичный класс PubSub, в котором определены методы Subscribe(string eventName, Action eventHandler) и SendEvent(string eventName). Внутри будет находиться Dictionary<string, List<Action>> , в котором будут храниться подписчики. SendEvent будет проходиться по всем подписчикам и вызывать переданый метод. А в методе Subscribe в коллекцию будет добавляться соответствующий handler. Но этот подход никак не связан с MEF.

    • Помечено в качестве ответа Abolmasov Dmitry 21 июня 2012 г. 11:41
    21 июня 2012 г. 7:10
    Отвечающий