Как работать с сервисом окон используя Ioc
Дошел до момента, когда ViewModel должна взаимодействовать с сервисом, чтобы он открыл окно, но при этом по идее наверно сервис не должен создавать окно), а только открывать и тут пока непонятки, что должен требовать Сервис в виде зависимости, подскажите пожалуйста куда двигаться.
Код VM, которая взаимодействует с сервисом
public class LoginViewModel : ViewModel
{
public ICommand CreateBD { get; set; }
public LoginViewModel(ILoginService loginService)
{
CreateBD = new Command(x =>
{
loginService.CreateBD();
});
}
}
Код сервиса, который должен открывать окно:
public class LoginService : ILoginService
{
public LoginService()
{
}
public void CreateBD()
{
}
Чтобы все работала все зарегистрировано, код:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
_services = new ServiceCollection();
ConfigureServices(_services);
_serviceProvider = _services.BuildServiceProvider();
var loginWindow = _serviceProvider.GetService<LoginWindow>();
loginWindow.Show();
}
void ConfigureServices(IServiceCollection services)
{
services.AddTransient<LoginWindow>();
services.AddSingleton<LoginViewModel>();
services.AddScoped<ILoginService, LoginService>();
}
Здесь я остановился, исходя из того, что сервис должен только открыть окно по требованию VM, то сервис не создает экземпляр окна, а только открывает.
- IServiceProvider прокинуть нельзя как зависимость в сервис, чтобы дергать от туда зарегистрированное окно.
- Само окно как зависимость тоже нельзя так как бизнес-логика не должна работать с view напрямую.
- Создавать окно сервис не должен.
- НО есть какая-то фабрика окон, которая наверно может прокинута как зависимость в сервис и уже она создает окно для сервиса, сервис лишь открывает его (непонятно будет при этом автоматически создана vm из контейнера для это окна, или придется дергать контейнер и сувать руками в datacontext окна).
- Или же есть какие-то механизмы другие и я все не правильно пишу) Подскажите пожалуйста.