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

StackOverflow https://stackoverflow.com/questions/76864

  •  09-06-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Вы можете прочитать больше об этом по адресу MSDN

Другие советы

Есть также Домен приложения.Тип решения событие, которое вы можете переопределить.

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top