Unity IoC и регистрация примитивных типов - PullRequest
1 голос
/ 16 сентября 2010

В этот момент я столкнулся с ситуацией с использованием Unity, которую я не знаю, как решить / приблизиться ... Вот моя проблема.

Я разрабатываю приложение WPF и использую MVVM (Prism Implimentation, следовательно, контейнер Unity). У меня есть ViewModel с именем MenuItemsViewModel (множественное число), который содержит IEnumerable из MenuItemViewModel (единственное число). В конструкторе MenuItemsViewModel я заполняю эту коллекцию из функции генератора следующим образом ...

    yield return new MenuItemViewModel(eventAggregator)
    {
        Text = "Dashboard",
        CommandText = "DASHBOARD"      
    };
    yield return new MenuItemViewModel(eventAggregator)
    {
        Text = "Areas",
        CommandText = "AREAS"
    };
    yield return new MenuItemViewModel(eventAggregator)
    {
        Text = "Users",
        CommandText = "USERS"
    };  //etc....

Я действительно не хочу делать это, а скорее полагаюсь на контейнер, чтобы сконструировать эти объекты для меня, но как, во имя Бога, я могу это сделать? Я на самом деле не хочу, чтобы моя ViewModel Items имела какие-либо знания о моей ViewModel Item, кроме интерфейса, который он реализует, но у меня есть около 15 таких пунктов меню, каждый из которых имеет разные значения свойств.

Я не совсем новичок в DI / IoC, но это большой вопрос для меня. Я вижу и получил пользу от инъекции моих услуг, но что вы делаете с конкретными ценностями?

Я думаю, что здесь я полностью ошибаюсь? Должен ли я просто разрешить конкретный экземпляр из контейнера и затем установить свойства? Это был бы вариант, но мне бы хотелось, чтобы мои реквизиты были доступны только для чтения.

Надеюсь, это достаточно ясно, .. кричите на меня, если нет: -)

Любая помощь очень ценится.

1 Ответ

1 голос
/ 16 сентября 2010

Я бы использовал разрешенные массивы для добавления пунктов меню:

container
  .RegisterInstance("DASHBOARD", new MenuItemViewModel(...))
  .RegisterInstance("AREAS", new MenuItemViewModel(...))

  .RegisterType<MenuItemsViewModel>(
     new InjectionConstructor(new ResolvedArrayParameter<MenuItemViewModel>()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...