Prism и Unity - предотвращают автоматическое создание типа - PullRequest
0 голосов
/ 18 февраля 2012

Я создаю приложение WPF, используя Prism и Unity в качестве контейнера.Пару раз я отрывался от порядка регистрации типов, при котором тип (ViewModel в конструктор View) автоматически создавался Unity, когда я его не регистрировал.Затем я попытался зарегистрировать тип с помощью ContainerControlledLifetimeManager () и думал Я создал синглтон.Однако автоматическое создание означало несколько экземпляров модели представления.

Помимо очевидного решения не быть маппетом и не выполнять вышеизложенное, есть способ предотвратить автоматическое создание Unity незарегистрированных типов и, возможно, создание исключениявместо этого?

1 Ответ

1 голос
/ 18 февраля 2012

Определите интерфейс для каждой из ваших ViewModels и затем зарегистрируйте их соответственно.

public interface IViewModel
{
     List<IUser> Users { get; }
}

public class ViewModel : IViewModel
{
     List<IUser> Users { get; }
}

Container.RegisterType<IViewModel, ViewModel>();

В вашем конструкторе убедитесь, что вводится интерфейсный тип, а не конкретный тип, так как Unity обязательно создаст экземпляр конкретного типа, поскольку он разрешим; тогда как интерфейс может иметь N реализаций.

Кроме того, ваш код должен быть сконструирован так, чтобы данные, которые должны существовать в приложении, приходили из службы, а не из ViewModel. Создание вашей ViewModel синглтоном не должно быть вашим подходом, передавайте данные через сервис. таким образом, ваша ViewModel может быть построена / уничтожена по желанию, данные, которые вы хотите сохранить, существуют в другом месте.

Container.RegisterType<IService, Service>(new ContainerControlledLifetimeManager());
Container.RegisterType<IViewModel, ViewModel>();

...

public List<IUser> Users
{
     get { return Container.Resolve<IService>().GetUsers(); }
}
...