Мне нужен совет по архитектуре приложения.
Я создаю настольное приложение .Net 4 WPF с поддержкой значков области уведомлений.
Приложение имеет несколько окон, которые появляются при запуске,затем закройте, и останется только значок области уведомлений.
Значок области уведомлений является чисто WPF-контролем, который я получил от этого примера кода проекта.
Так как мое приложение должно работать, даже когда все окна закрыты, у меня естьустановите
ShutdownMode="OnExplicitShutdown"
в App.xaml.
Я опишу мою идею архитектуры и механизма запуска, и вы скажете мне, где я иду не так, и исправьте меня, если это возможно.
В App.xaml.cs я создаю Ninject StandardKernel
, назовем его appKernel
и загружаем в него модули Ninject.Сначала Ninject должен разрешить только один интерфейс - экземпляр heartbeatManager
.HeartbeatManager - это класс, для которого я планирую использовать:
a) Размещение моего экземпляра NotifyIcon в качестве переменной поля, чтобы он был виден, пока экземпляр класса находится в памяти.
b) Реализация события shutdown, на которое я подпишусь в app.xaml.cs, и явно отключаю приложение, когда его запрашивает класс heartbeat.
В этот момент создается экземпляр heartbeatManager
, оставленный для зависания в памяти.
В App.xaml я установил StartupUri="MainWindow.xaml"
, чтобы создать и отобразить MainWindow.Следуя шаблону MVVM Light ViewModelLocator, MainWindow пытается разрешить свой контекст данных из статического экземпляра ViewModelLocator, определенного в App.xaml:
<Application.Resources>
<ViewModels:ViewModelLocator x:Key="Locator" d:IsDataSource="True" />
</Application.Resources>
Создается экземпляр ViewModelLocator и в конструкторе инициализируется другой StandardKernel (Есть ли какой-либо другой тип ядра, которое я сейчас использую? ), который будет использоваться для разрешения привязок модели представления.Модель представления MainWindow предоставляется для удовлетворения запроса окон, и все приложение продолжает работать.
Очень важное значение заключается в том, что экземпляр hearbeatManger привязан к определению интерфейса в одной области видимости, так что представления моделейкоторые требуют его в качестве параметра конструктора, могут разрешить и получить уже созданный экземпляр.Будет ли работать такое разрешение зависимостей, если модель представления и heartbeatManager загружены в разные ядра?Если нет, то как я могу решить эту проблему?
Является ли вышеописанный сценарий хорошим с точки зрения архитектуры, реализуемым ли он в коде, или я допустил ошибку, когда размышлял над архитектурой?