Chargement d’assemblages à l’exécution

Mon projet est une application dans laquelle nous chargeons divers assemblages et effectuons des opérations dessus.

Nous sums bloqués dans une situation où nous devons append une référence à l’assembly que nous chargeons (qui sera sélectionné par l’utilisateur). J’ai donc besoin d’append une référence à la DLL au moment de l’exécution.

J’ai essayé ce site, mais ici, ils ne prennent en charge que les DLL Microsoft, telles que System.Security, etc.

Vous ne pouvez pas “append une référence” au moment de l’exécution – mais vous pouvez charger des assemblys – Assembly.LoadFrom / Assembly.LoadFile etc. Le problème est que vous ne pouvez pas les décharger à moins d’utiliser AppDomain s. Une fois que vous avez un assemblyInstance.GetType(fullyQualifiedTypeName) , vous pouvez utiliser assemblyInstance.GetType(fullyQualifiedTypeName) pour créer des instances par reflection (que vous pouvez ensuite assemblyInstance.GetType(fullyQualifiedTypeName) interfaces connues, etc.).

Pour un exemple sortingvial:

 // just a random dll I have locally... Assembly asm = Assembly.LoadFile(@"d:\protobuf-net.dll"); Type type = asm.GetType("ProtoBuf.ProtoContractAtsortingbute"); object instance = Activator.CreateInstance(type); 

À ce stade, je peux soit convertir l’ instance sur un type / interface de base connu, soit continuer à utiliser la reflection pour la manipuler.

Si l’assembly se trouve dans un emplacement autre que celui en cours ou dans le GAC, utilisez simplement l’événement AppDomain.CurrentDomain.AssemblyResolve pour livrer l’assembly vous-même.

Si vous chargez un assemblage au moment de l’exécution, il recherchera toutes ses dépendances dans l’emplacement actuel ou dans le GAC et les chargera si elles sont trouvées, sinon erreur.

Le bloc d’applications d’interface utilisateur composite facilite la conception et la mise en œuvre de vos applications client dans trois domaines:

  • Il permet à votre application de s’appuyer sur le concept de modules ou de plug-ins.
  • Il permet aux développeurs possédant une expertise de shell de créer des composants qui masquent la complexité de l’interface utilisateur au développement de la logique métier.
  • Il facilite le développement en utilisant des modèles pour un couplage lâche entre les modules.

Pour WPF: Jetez un coup d’œil à Prism: patterns & practices Guide d’application composite pour WPF et le site Silverlight Il effectue le chargement de l’assemblage requirejs et utilise réellement Unity en interne car il s’agit d’un conteneur IoC.

Pour les non-WPF: Jetez un coup d’œil à Smart Client – Bloc d’applications d’interface utilisateur composite

Ou encore: essayez l’un des conteneurs IoC tels que Castle Windsor , autofac, unit, etc.