Обработка событий в C # Assembly - PullRequest
       0

Обработка событий в C # Assembly

1 голос
/ 11 сентября 2010

У меня есть исполняемый проект с именем A.EXE, который ссылается на библиотеку классов C # B.DLL.

A.EXE генерирует события, которые обрабатываются классом в B.DLL. В этих событиях используется собственный дочерний элемент EventArgs с именем ProjectEventArgs.

Нужно ли добавить ссылку на A.EXE в проект B.DLL, чтобы был определен класс ProjectEventArgs? Это не совсем правильно для меня, так как я думаю, что это круговая зависимость.

Есть ли способ реорганизовать мой код, чтобы избежать этого?

спасибо, Энди

Ответы [ 2 ]

4 голосов
/ 11 сентября 2010

Ваш B.DLL не должен ничего знать о A.EXE - вы правы, вы создаете круговую зависимость.

Вам необходимо провести рефакторинг кода, чтобы методы, генерирующие события, находились в B.DLL или в третьей сборке, на которую ссылаются как A, так и B. По крайней мере, определение ProjectEventArgs должно быть перемещено из A .

Не видя ваш код и более детальную структуру проекта, будет трудно сказать, какой из них будет наилучшим.

2 голосов
/ 11 сентября 2010

Вы не можете ссылаться на a.exe из b.dll, поэтому нет, это не решение. Даже если бы a была DLL, вы не смогли бы сделать ссылку, потому что она привела бы к циклической ссылке между сборками, что недопустимо.

Первое решение при рефакторинге вашего кода, решить, принадлежит ли ProjectEventArgs в dll или приложение. Способ сделать это - проверить, какие еще зависимости есть у класса ProjectEventArgs - зависит ли он от других типов из A.exe или других зависимостей нет? (Если последнее, воткните его в dll).

В случае если у него есть зависимости внутри A, вам необходимо абстрагировать функциональность ProjectEventArgs в базовый (абстрактный) класс или интерфейс. (Или, поскольку это уже дочерний элемент EventArgs - разве вы не можете захватить всю необходимую функциональность, просто используя EventArgs из B?)

Действительно может быть с образцом кода вашего класса ProjectEventArgs и фрагментом того, где вы используете / вызываете его для получения фактического примера решения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...