Могу ли я изменить способ разрешения и создания экземпляров в .NET? - PullRequest
0 голосов
/ 17 сентября 2008

В некоторых языках вы можете переопределить ключевое слово "new", чтобы управлять тем, как создаются экземпляры. Вы не можете сделать это напрямую в .NET. Однако мне было интересно, есть ли способ, скажем, обработать исключение «Тип не найден» и вручную разрешить тип до того, как взорвется тот, кто «создал» этот тип?

Я использую сериализатор, который читает файл на основе xml и создает экземпляры описанных в нем типов. У меня нет никакого контроля над сериализатором, но я бы хотел взаимодействовать с процессом, надеюсь, без написания собственного хоста appdomain.

Пожалуйста, не предлагайте альтернативные методы сериализации.

Ответы [ 4 ]

5 голосов
/ 17 сентября 2008

Вы можете прикрепить обработчик событий к AppDomain.CurrentDomain.AssemblyResolve, чтобы принять участие в процессе.

Ваш EventHandler должен вернуть сборку, которая отвечает за тип, переданный в ResolveEventArgs.

Подробнее об этом можно прочитать на MSDN

1 голос
/ 17 сентября 2008

выбор не нарушен обсуждает, как смотреть на это по-другому - ошибка может быть в вашем дизайне, а не в вашем инструменте.

Я думаю, что пытаться заставить "новых" делать что-то еще, будет неправильным подходом.

Подумайте, почему перегрузку операторов следует использовать с осторожностью - она ​​нелогична и сложна в отладке, когда в семантике языка есть скрытые изменения.

Отойдите назад и посмотрите на дизайн в более широком контексте, постарайтесь найти более разумный способ решения проблемы.

1 голос
/ 17 сентября 2008

Существует также событие AppDomain.TypeResolve , которое вы можете переопределить.

0 голосов
/ 17 сентября 2008

Вы должны проверить Reflection и класс Activator. Они позволят вам создавать объекты из строк. Конечно, объект должен находиться в одной из сборок, к которой у вас есть доступ.

...