Posso alterar a forma como os tipos são resolvidos e instanciados no .NET?

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

  •  09-06-2019
  •  | 
  •  

Pergunta

Em alguns idiomas você pode substituir a palavra-chave "new" para controlar como os tipos são instanciados.Você não pode fazer isso diretamente no .NET.No entanto, eu queria saber se existe uma maneira de, digamos, lidar com uma exceção "Tipo não encontrado" e resolver manualmente um tipo antes que quem "novo" tenha criado esse tipo exploda?

Estou usando um serializador que lê um arquivo baseado em xml e instancia os tipos descritos nele.Não tenho nenhum controle sobre o serializador, mas gostaria de interagir com o processo, espero sem escrever meu próprio host appdomain.

Por favor, não sugira métodos alternativos de serialização.

Foi útil?

Solução

Você pode anexar um manipulador de eventos a AppDomain.CurrentDomain.AssemblyResolve para participar do processo.

Seu EventHandler deve retornar o assembly responsável pelo tipo passado no ResolveEventArgs.

Você pode ler mais sobre isso em MSDN

Outras dicas

Há também o AppDomain.TypeResolve evento que você pode substituir.

select não está quebrado discute como encarar isso de maneira diferente - a falha pode estar no seu design e não nas suas ferramentas.

Acho que tentar ser “novo” para fazer outra coisa será a abordagem errada.

Pense por que a sobrecarga do operador deve ser usada com cautela - é contra-intuitivo e difícil de depurar quando há alterações ocultas na semântica da linguagem.

Dê um passo atrás e observe o design em um contexto mais amplo, tente encontrar uma maneira mais sensata de resolver o problema.

Você deve verificar o Reflection e a classe Activator.Eles permitirão que você crie objetos a partir de strings.É verdade que o objeto deve estar em um dos assemblies aos quais você tem acesso.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top