Почему, по вашему мнению, вам нужен экземпляр пользовательского интерфейса в сборке бизнес-логики?
Чтобы зарегистрировать обработчик событий, вам обычно требуется только экземпляр из вызывающей сборки (наблюдатель, уже содержащийся в вызывающей сборке)и экземпляр ссылочной сборки (ваша сборка, содержащая средство просмотра файловой системы).
Тогда у вас есть, например, следующая структура:
Сборка с логикой
public class MyCustomWatcher
{
public event EventHandler Event;
private void RaiseEventForWhateverReason()
{
if (Event != null)
{
Event(this, new Args());
}
}
public Data GetData()
{
//return the data
}
}
Сборка с пользовательским интерфейсом: - здесь объявлены как типы, так и типы контроллеров.
class Form : System.Windows.Forms.Form
{
public void DisplayNotification(Data data)
{
//actual code here
}
}
class Controller
{
private Form form;
private MyCustomWatcher watcher;
public void Init()
{
this.watcher = CreateWatcher();
RegisterEvents();
ShowForm();
}
void ShowForm()
{
//show
}
void RegisterEvents()
{
this.watcher.Event += HandleChange;
}
void HandleChange(object sender /*this will be the instance that raised the event*/, SomeEventArgs e)
{
//BTW: this.watcher == sender; //the same instance
form.DisplayNotification(this.watcher.GetData());
}
}
Сборка с пользовательским интерфейсом ссылается на сборку с логикой.Здесь нет круговой зависимости.