¿Puedo modificar la forma en que se resuelven y crean instancias de los tipos en .NET?

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

  •  09-06-2019
  •  | 
  •  

Pregunta

En algunos idiomas, puede anular la palabra clave "nueva" para controlar cómo se crean instancias de los tipos.No puede hacer esto directamente en .NET.Sin embargo, me preguntaba si hay una manera de, digamos, manejar una excepción de "Tipo no encontrado" y resolver manualmente un tipo antes de que el "nuevo" que creó ese tipo explote.

Estoy usando un serializador que lee un archivo basado en xml y crea instancias de los tipos descritos en él.No tengo ningún control sobre el serializador, pero me gustaría interactuar con el proceso, con suerte sin escribir mi propio host de dominio de aplicación.

No sugiera métodos de serialización alternativos.

¿Fue útil?

Solución

Puede adjuntar un controlador de eventos a AppDomain.CurrentDomain.AssemblyResolve para participar en el proceso.

Su EventHandler debe devolver el ensamblado responsable del tipo pasado en ResolveEventArgs.

Puedes leer más sobre esto en MSDN

Otros consejos

También está el AppDomain.TypeResolve evento que puedes anular.

seleccionar no está roto analiza cómo verlo de manera diferente: la falla puede estar en su diseño, no en sus herramientas.

Creo que intentar que los "nuevos" hagan otra cosa será un enfoque equivocado.

Piense en por qué la sobrecarga de operadores debe usarse con precaución: es contraintuitiva y difícil de depurar cuando hay cambios ocultos en la semántica del lenguaje.

Da un paso atrás y observa el diseño en un contexto más amplio, intenta encontrar una forma más sensata de resolver el problema.

Deberías consultar Reflection y la clase Activator.Te permitirán crear objetos a partir de cadenas.Por supuesto, el objeto tiene que estar en uno de los ensamblajes a los que tiene acceso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top