1 | |||||||||||||||||||||||||||||||
Есть ли в библиотеке NInject и подобных возможность сопоставить один не связанный наследованием тип к другому?05.03.2015, 12:14. Показов 691. Ответов 4
Метки нет (Все метки)
В общем, написал свой контейнер сопоставления типов. Нужен был, чтобы убрать ад из кода по созданию окон настроек. Чтобы был краткий код, который создаёт окно нужного типа по типу вью модели этого окна настроек. Ранее был ад из
Сейчас я открываю окно примерно так (там у меня ещё есть код, и код вызывающий этот метод, но это не суть):
Кликните здесь для просмотра всего текста
Вот так я настраиваю сопоставления типов для программы. То есть я в одном месте это делаю и всё работает. Мне нужно лишь создать новое окно настроек, новую вью модель настроек и репозиторий сохранения и загрузки настроек для текущей вью модели, соблюсти некоторые условия, что от чего наследовать нужно (но это логично, там это само собой разумеется, так что это нисколько не сложность). Я тут сократил, много удалил лишнего, так чисто чтобы было представление о чём я. Кликните здесь для просмотра всего текста
Вот так я загружаю настройки. Там увидите проверку, если есть сопоставление, то берём репозиторий, если нет, то вызываем какой-то метод. Это просто переходный период от старого кода к новому, в старом просто ад был, нервы портить себе не охота, переделываю по уму.
А ну и вот. Суть вопроса. Можно ли в NInject сопоставить так же типы, чтобы они не были связаны наследованием так же как у меня. Мне это нужно лишь из-за того, что в NInject есть удобный механизм настройки начальных параметров создаваемого экземпляра в NInjectModule
И ещё. Есть такой паттерн Composition Root, вот я стремлюсь всё настраивать наверху, а потом уже брать готове где надо из контейнера сопоставления, например.
0
|
05.03.2015, 12:14 | |
Ответы с готовыми решениями:
4
Привести один тип к другому. Тип универсальный, параметризируется другими типами Есть ли возможность подключить к текущему батнику еще один? Есть ли возможность триггером проверять что записано значение в один столбец Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
05.03.2015, 21:55 | 2 |
0
|
Master of Orion
|
|
06.03.2015, 03:34 | 3 |
Casper-SC, Если у этих классов есть какие-то общие свойства, выноси их в интерфейс и бинди на на них как в примере. Я на 99,(9)% уверен, что ни один IoC не позволяет просто так рандомно присваивать любому объекту любой другой. Хотя у майков есть читерский класс-прокси, который позволяет обходить такие штуки, т.к. он имплементит ВСЕ интерфейсы и редиректит их куда надо. Название уже не вспомню, но это адский трешак. Если это внезапно нужно, то надо на пару деньков от кода отойти и подумать, ЧЯДНТ собственно
0
|
06.03.2015, 07:25 [ТС] | 4 |
Да.
Не, это единственный более-менее правильный вариант в данном случае. Всё это дело позволяет мне кидать в окно объект любого типа наследующего от MimicPanelObject и привязывать его к одной команде OpenSettingWindowCommand (WPF). А далее откроется окно настроек или нет зависит от того есть ли в контейнере сопоставления тип вью модели настоек для данного типа объекта наследника от MimicPanelObject. Я думаю, тут всё нормально написано, врядли есть смысл что-то выдумывать. Самое главное, что после того как я внедрил этот механизм теперь новые настройки создавать стало в разы проще и делается это быстрее, и нужно мне лишь создать нужные классы и репозиторий для сохранения, получения настроек и сопоставить типы в контейнере. Добавлено через 1 минуту Ладно, я сам нагуглил, что так сделать нельзя в Ninject и подобных. Да и не особо нужно, в принципе, решил по другому проблему.
0
|
Кодогенератор
200 / 200 / 51
Регистрация: 15.06.2011
Сообщений: 794
|
|
06.03.2015, 10:04 | 5 |
в контейнерах поидее есть возможность добавлять типы и давать им название, чтото вроде метки, которой может выступить название сопоставляемого типа.
но думаю проще все же добавить все типы в контейнер, а сопоставить в словаре, а контейнером создавать...
0
|
06.03.2015, 10:04 | |