Как работать с сервисом окон используя 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, то сервис не создает экземпляр окна, а только открывает.

  1. IServiceProvider прокинуть нельзя как зависимость в сервис, чтобы дергать от туда зарегистрированное окно.
  2. Само окно как зависимость тоже нельзя так как бизнес-логика не должна работать с view напрямую.
  3. Создавать окно сервис не должен.
  4. НО есть какая-то фабрика окон, которая наверно может прокинута как зависимость в сервис и уже она создает окно для сервиса, сервис лишь открывает его (непонятно будет при этом автоматически создана vm из контейнера для это окна, или придется дергать контейнер и сувать руками в datacontext окна).
  5. Или же есть какие-то механизмы другие и я все не правильно пишу) Подскажите пожалуйста.

Ответы (0 шт):