разрешить зависимости в ViewModel

#c# #wpf #mvvm #mvvm-light

#c# #wpf #mvvm #mvvm-light

Вопрос:

У меня есть ViewModel SupplierViewModel, я устанавливаю datacontext моего представления для этой ViewModel в XAML, используя MVVM lights экземпляр ViewModelLocator.

Вот мое мнение :

 <UserControl xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         x:Class="RH_Maize.SupplierView"
         x:Name="UserControl"
         d:DesignWidth="1040"
         d:DesignHeight="630"
         DataContext="{Binding Supplier, Source={StaticResource Locator}}">

        <!--UI elements goes here-->

</UserControl>
  

Вот мой локатор ViewModel :

  public class ViewModelLocator
{
    static ViewModelLocator()
    {
        ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);

        SimpleIoc.Default.Register<MainViewModel>();


        if (ViewModelBase.IsInDesignModeStatic)
        {
            SimpleIoc.Default.Register<ISupplierDataService, SupplierDataServiceMock>();
        }
        else
        {
           SimpleIoc.Default.Register<ISupplierDataService, SupplierDataService>();
        }
    }


    #region Here we create and expose some of the applications viewModels

    /// <summary>
    /// Gets the Main property.
    /// </summary>
    [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Performance",
        "CA1822:MarkMembersAsStatic",
        Justification = "This non-static member is needed for data binding purposes.")]
    public MainViewModel Main
    {
        get
        {
            return SimpleIoc.Default.GetInstance<MainViewModel>();
        }
    }

    public SupplierViewModel Supplier
    {
        get
        {
            return new SupplierViewModel();
        }
    }
    }

    /// <summary>
    /// Cleans up all the resources.
    /// </summary>
    public static void Cleanup()
    {
    }
}
  

ViewModel :

 public class SupplierViewModel : WorkspaceViewModel,IDataErrorInfo
{
   #region Fields

    readonly Supplier _supplier;
    readonly SupplierRepository _supplierRepository;
    private IDialogService _dialogService;

   #endregion //Fields

    #region Constructor

    public SupplierViewModel(Supplier supplier, SupplierRepository supplierRepository, IDialogService service)
    {
        _supplier = supplier;
        _supplierRepository = supplierRepository;
        _dialogService = service;
    }

    #endregion //Constructor

}
  

Моя проблема:

Как мне разрешить все эти зависимости?

Как я могу заполнить данные о времени проектирования в пользовательском интерфейсе, я знаю, для поддержки данных о времени разработки в представлении, в котором мне нужен конструктор без параметров в моей ViewModel?

Комментарии:

1. Вы можете связать свой конструктор без параметров с «реальным» конструктором, используя заглушки.

2. @GayotFow, что здесь означает заглушки, будут ли у вас примеры

3. Для целей времени разработки создайте конструктор без параметров. И связать его с другим конструктором, используя поддельный поставщик, поддельный SupplierRepository и так далее. Заглушки.