Я пишу приложение WPF, используя Unity в качестве Ioc для внедрения зависимостей
Я создаю свое главное окно с помощью:
container.RegisterType<IMainWindow, MainWindow>();
container.RegisterType<ISecondWindow, SecondWindow>();
container.Resolve<IMainWindow>().Show();
Все другие окна внедряются, например, с помощью внедрения зависимостив моем «MainWindow» я могу открыть через кнопку «SecondWindow», поэтому у меня есть ISecondWindow в конструкторе MainWindow
public partial class MainWindow: Window, IMainWindow
{
public MainWindow(IMainWindowViewModel viewModel, ISecondWindow secondWindow)
{
//with this solution I can open the second window from IMainWindowViewModel (viewmodels has no reference to windows which are in a separate project)
viewModel.OpenSecondWindow += (s,e) => secondWindow.Show();
}
SecondWindow не имеет других окон, поэтому он определяет только ViewModels в своем конструкторе
public partial class SecondWindow: Window, ISecondWindow
{
public SecondWindow(ISecondWindowViewModel viewModel)
все зависимости затем разрешаются каскадно (WINDOW -> VIEWMODEL -> SERVICE -> REPOSITORY)
Это прекрасно работает, пока у меня только один экземпляр моего второго окна, но ...
что делать, если я могу одновременно открыть N окон / экземпляр моего ISecondWindow (например, у меня есть список, я дважды щелкаю по первой строке, и окно ISecondWindow открыто с деталями первой строки, затем я дважды щелкаюво втором ряду и ДРУГОЕ ISecondWindow открыто с деталями второго ряда (так что я могу просматривать детали первого и второго ряда одновременно))?
с DI это не может быть выполнено, потому что у меня есть и я могу использовать только один экземпляр моего ISecondWindow.
Единственное решение, которое я имею в виду для решения этой проблемы, - это использование Сервиса.локатор, но сервисный локатор - это анти-паттерн, и я бы не стал его использовать.
У вас есть какие-нибудь идеи / предложения для решения этой проблемы?