Какие есть альтернативы для старой функциональности Unity Container?
Добрый день.
Столкнулся с обновлением старого .Net Framework приложения до .Net 5. В ходе обновления был обновлен Unity Container, и мой код, конечно, не может компилироваться.
Есть следующий проблемы:
1) IBuilderContext был заменен на BuilderContext, из которого убрали CurrentOperation, BuildKey и GetOverriddenResolver. Как их можно заменить?
2) не могу найти ConstructorArgumentResolveOperation (нужен для CurrentOperation)
3) не могу найти UnityContainerReadOnly.Teardown
Может кто-то подсказать альтернативы этого функционала для наиболее легкого переезда на новую версию?
Василий Банников, к сожалению, мне критично использовать именно этот контейнер(
С BuildKey разобрался - это тип, который представлен сейчас в комбинации двух полей: RegistrationType и Name
ConstructorArgumentResolveOperation используется как:
context.CurrentOperation = new ConstructorArgumentResolveOperation(context.RegistrationType, null, connectorParameterName);
var over = context.GetOverriddenResolver(typeof(String));
Насколько я понял, это необходимо в случае возникновения ошибки, но так как не понимаю до конца контекст (по сути сейчас и начинаю разбираться с Unity), не могу определить, как заменить такой фрагмент (встречается несколько раз в коде)
к сожалению, мне критично использовать именно этот контейнер(
А почему?
Если у вас просто по всему проекту расставлены его атрибуты - вы можете написать скрипт, который пройдётся по всему AST и удалит всё лишнее, добавив замену для кода.
Василий Банников, 1) рабочий проект, и для этого нужно много геморроя
2) есть очень большой слой логики, который работает с Unity, и который тогда нужно переписать с нуля, а там такой легаси, что страшно входить
1) рабочий проект, и для этого нужно много геморроя
Если покрыт тестами, то ничего сложного нет - только потратить время на переход
2) есть очень большой слой логики, который работает с Unity, и который тогда нужно переписать с нуля, а там такой легаси, что страшно входить
"очень большой" - это сколько?
И какой логики? Может в других контейнерах есть инструменты, которые позволяют эти задачи решить проще и компактнее? Если код однотипный, то можно всякой автозаменой всё перенести.
Был у меня один случай, где тоже "много логики вокруг контейнера" было, но там эта логика нужна была только для того чтобы сымитировать Scoped lifetime, когда контейнер умел только в singletone