Puis-je modifier la manière dont les types sont résolus et instanciés dans .NET?

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

  •  09-06-2019
  •  | 
  •  

Question

Dans certaines langues, vous pouvez remplacer le " nouveau " mot clé pour contrôler l'instanciation des types. Vous ne pouvez pas faire cela directement dans .NET. Cependant, je me demandais s’il existait un moyen de gérer, par exemple, un "Type non trouvé". exception et résoudre manuellement un type avant celui qui "nouveau" édite ce type explose?

J'utilise un sérialiseur qui lit dans un fichier XML et instancie les types décrits dans celui-ci. Je n'ai aucun contrôle sur le sérialiseur, mais j'aimerais interagir avec le processus, sans écrire mon propre hôte appdomain.

Veuillez ne pas suggérer d'autres méthodes de sérialisation.

Était-ce utile?

La solution

Vous pouvez attacher un gestionnaire d'événements à AppDomain.CurrentDomain.AssemblyResolve pour prendre part au processus.

Votre gestionnaire d'événements doit renvoyer l'assembly responsable du type transmis dans ResolveEventArgs.

Vous pouvez en savoir plus à ce sujet sur MSDN

Autres conseils

Il existe également le AppDomain.TypeResolve événement que vous pouvez remplacer.

n'est pas sélectionné cassé explique comment le regarder différemment - le problème peut venir de votre conception et non de votre outillage.

Je pense qu'essayer d'obtenir un "nouveau" faire autre chose va être la mauvaise approche.

Pensez aux raisons pour lesquelles la surcharge d'opérateurs doit être utilisée avec prudence: elle est contre-intuitive et difficile à mettre au point lorsque des modifications cachées de la sémantique du langage sont masquées.

Reculez et examinez la conception dans un contexte plus large, essayez de trouver un moyen plus sensé de résoudre le problème.

Vous devriez vérifier Reflection et la classe Activator. Ils vous permettront de créer des objets à partir de chaînes. Accordé, l'objet doit figurer dans l'un des assemblys auxquels vous avez accès.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top