WPF C # Ninject с проблемой mainViewModel и нескольких viewmodel - PullRequest
0 голосов
/ 11 декабря 2018

У меня проблема с реализацией ninject в моем приложении.

Мое приложение содержит представление MainView и модель представления.MainView использует resource.xaml для рисования GUI.Я также привязываю viewmodel для каждого ресурса в моем MainView.xaml.

У меня проблема с реализацией Ninject.

В моем MainViewModel, который я создаю;

    public logViewModel ChangelogViewModel { get; set; } = new logViewModel();
    public TabViewModel ToolTabViewModel { get; set; } = new ToolTabViewModel();

, которые я отправляю как контент viewmodel для файлов ресурсов.Как я могу использовать ninject для автоматического создания этих дополнительных моделей представления?

У меня также есть проблема с использованием ядра для привязки интерфейсов.Когда мой конструктор запускается, я не получаю функции из привязки ядра ninject.

Кажется, что во время выполнения, когда я проверяю конструктор, он получает только мою строку соединения, которая является частной переменной в viewmodel.Но здесь нет ни одной из моих функций.

        Bind<IDataAccessor>().To<DataAccessor>().InSingletonScope().WithConstructorArgument("connectionString", connectionString);

Еще одна странная вещь заключается в том, что не кажется, что мой метод доступа выполняет свою функцию при вызове.Частичный класс как-то связан с этим?

Я работаю с компонентами telerik.

1 Ответ

0 голосов
/ 11 декабря 2018

Как и большинство DI-контейнеров, Ninject работает с инжектором конструктора.Вы говорите ему, что создавать, когда конструктор класса / viewmodel запрашивает определенный интерфейс.

Когда вы получаете экземпляр этого класса, он предоставляет параметры, которые вы зарегистрировали.

Быстрый и грязный примердля аромата.

Вместо того, чтобы просто стартурл, я звоню стартапу, чтобы показать главное окно.

    private void Application_Startup(object sender, StartupEventArgs e)
    {
        var nj = new StandardKernel();
        nj.Bind<IVMOne>().To<VMOne>().InTransientScope();

        MainWindow mw = new MainWindow();
        mw.DataContext = nj.Get<MainWindowViewModel>();
        mw.Show();
    }

Здесь я говорю, когда я прошу IVMOne, тогда дайте мне VMONe.MainWindowViewModel хочет IVMOne для своего ctor.Поэтому, когда я получаю объект mainwindowview, модель также дает мне VMOne.

class MainWindowViewModel
{
    public IVMOne VMOne { get; set; }
    public MainWindowViewModel(IVMOne vmOne)
    {
        VMOne = vmOne;
    }
}

, который я могу затем связать с:

    Title="MainWindow" Height="450" Width="800">
<Grid>
    <TextBlock Text="{Binding VMOne.Hello}"/>
</Grid>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...