То, как я использую Unity в WPF (MVVM Light), выглядит следующим образом:
Я создаю класс загрузчика в корне приложения, что-то вроде:
public class Bootstrapper
{
public IUnityContainer Container { get; set; }
public Bootstrapper()
{
Container = new UnityContainer();
ConfigureContainer();
}
private void ConfigureContainer()
{
Container.RegisterType<IMyRepo, MyRepo>();
Container.RegisterType<MainViewModel>();
}
}
Это мой загрузчик,Я также регистрирую ViewModels, потому что их легко создать в локаторе.
Затем я создаю вспомогательный модуль в конструкторе ViewModelLocator и разрешаю здесь каждую ViewModel, например:
public class ViewModelLocator
{
private static Bootstrapper _bootStrapper;
static ViewModelLocator()
{
if (_bootStrapper == null)
_bootStrapper = new Bootstrapper();
}
public MainViewModel Main
{
get { return _bootStrapper.Container.Resolve<MainViewModel>(); }
}
}
Как вывидите, мой ViewModelLocator прост, он просто создает загрузчик и разрешает ViewModel, и эти виртуальные машины также разрешают свои зависимости через контейнер:)
Может быть, есть лучший способ архивировать это, но этодействительно хорошее начало.