Могу ли я изменить способ разрешения и создания экземпляров типов в .NET?
-
09-06-2019 - |
Вопрос
В некоторых языках вы можете переопределить ключевое слово "new", чтобы управлять способом создания экземпляров типов.Вы не можете сделать это непосредственно в .NET.Однако мне было интересно, есть ли способ, скажем, обработать исключение "Тип не найден" и вручную разрешить тип до того, как тот, кто "новый" отредактировал этот тип, взорвется?
Я использую сериализатор, который считывает файл на основе xml и создает экземпляры типов, описанных в нем.У меня нет никакого контроля над сериализатором, но я хотел бы взаимодействовать с процессом, надеюсь, без написания собственного хоста appdomain.
Пожалуйста, не предлагайте альтернативные методы сериализации.
Решение
Вы можете прикрепить обработчик событий к AppDomain.CurrentDomain.AssemblyResolve примет участие в процессе.
Ваш обработчик событий должен вернуть сборку, которая отвечает за тип, переданный в ResolveEventArgs.
Вы можете прочитать больше об этом по адресу MSDN
Другие советы
Есть также Домен приложения.Тип решения событие, которое вы можете переопределить.
выбор не нарушен обсуждается, как взглянуть на это по-другому - ошибка может быть в вашем дизайне, а не в инструменте.
Я думаю, что пытаться заставить "новенького" делать что-то другое будет неправильным подходом.
Подумайте о том, почему перегрузку операторов следует использовать с осторожностью - это противоречит интуиции и трудно отлаживается при наличии скрытых изменений в семантике языка.
Сделайте шаг назад и посмотрите на дизайн в более широком контексте, попытайтесь найти более разумный способ решения проблемы.
Вы должны проверить Отражение и класс Activator.Они позволят вам создавать объекты из строк.Конечно, объект должен находиться в одной из сборок, к которым у вас есть доступ.