Передача сервисов в MainViewModel - СЛЕДУЕТ ли мне использовать контейнер внедрения зависимостей? - PullRequest
2 голосов
/ 02 января 2011

У меня есть этот код:

public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);        

            var mainVM = new MainViewModel
            (
                new Service1(),
                ...
                new Service10(),
            );

            var window = new MainWindow();
            window.DataContext = mainVM;
            window.Show();

        }
    }

Я передаю все свои экземпляры служб в MainViewModel.Внутри MainViewModel я распространяю эти сервисы на другие ViewModel через передачу параметров конструктора.

Должен ли я использовать какую-либо инфраструктуру DI для сервисов в классе App?

Если да, в чем преимущество разрешения сервисоввместо того, чтобы просто создавать экземпляр вручную ...?

1 Ответ

1 голос
/ 02 января 2011

Вы можете зарегистрировать все эти типы в контейнере, и метод OnStartup может выполнить один вызов Resolve.

Во-первых, пусть MainWindow принимает свою модель представления в своем конструкторе:

public MainWindow(MainViewModel viewModel)
{
    DataContext = viewModel;
}

Затем зарегистрируйте MainWindow и MainViewModel в контейнере рядом с сервисами. Если MainViewModel требуются другие модели представления, поместите их в его конструктор и зарегистрируйте их.

Наконец, решите MainWindow, который выполняет всю работу по созданию экземпляра:

var window = container.Resolve<MainWindow>();

window.Show();

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

Преимущества этого подхода (из комментариев):

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

2) MainViewModel освобождается от необходимости знать, как создавать свои дочерние модели представления, что позволяет ему сосредоточиться на своих основных обязанностях вместо необходимости знать каждую отдельную зависимость своих детей.

...