Использование UserControl с DependencyInjection
Всем добрый день! Появилась следующая проблема, необходимо создать MenuControl, состоящий из XAML-разметки (стандартной)
<UserControl x:Class="ControlsLibrary.Views.MenuControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:vm="clr-namespace:ControlsLibrary.ViewModels"
mc:Ignorable="d"
d:DesignHeight="450" d:DesignWidth="800">
<UserControl.DataContext>
<vm:MenuControlViewModel/>
</UserControl.DataContext>
<Grid/>
</UserControl>
, MenuControl.cs (стандартный)
public partial class MenuControl : UserControl
{
public MenuControl()
{
InitializeComponent();
}
}
и MenuControlViewModel.cs (пустой класс)
public class MenuControlViewModel
{
public MenuControlViewModel(IMediator m)
{}
}
, при этом MenuControlViewModel должен быть задан как DataContext. Так же MenuControlViewModel должен иметь конструктор, принимающий экземпляр интерфейса IMediator в качестве параметра. Передачу в конструктор параметра сделал с помощью DependencyInjection:
private readonly IHost _host;
public Register()
{
_host = Host.CreateDefaultBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<MainWindow>();
services.AddSingleton<IMediator, Mediator>();
}).Build();
}
public void OnStartup(object sender, StartupEventArgs e)
{
using var serviceScope = _host.Services.CreateScope();
var window = serviceScope.ServiceProvider.GetService<MainWindow>();
window.Show();
}
Во всём остальном коде DI работает. Но есть проблема: т.к. MenuControlViewModel должен быть DataContext, то нужно его где-то задать. Если задавать в XAML – будет ошибка, т.к. нельзя передать ничего в качестве параметра. Если задавать в MenuControl.cs, то нужно передать параметры в MenuControl.cs, Но будет ошибка – UserControl запускается только со стандартным конструктором, без параметров.