2010-01-28 6 views
1

Je l'ai fait dans les architectures Plugin Win32 & C/C++ pendant des années, avec des points d'extension chargés dynamiquement de DLL avec LoadLibrary, GetProcAddress, etc.Quelles sont les étapes pour obtenir le plugin ou la fonctionnalité d'extension dans une application C#?

Maintenant, le temps est venu de C#. Quelles sont les étapes correspondantes ici - charger dynamiquement un assemblage? Ou est-ce un schéma complètement différent?

+1

http://stackoverflow.com/questions/tagged/ioc+c%23 et http://stackoverflow.com/questions/tagged/plugins+c%23 – jmservera

+0

@jmservera: ces liens ne sont pas valides. –

+0

@Kevin Brock, si vous voulez dire qu'ils sont cassés, vérifiez ceux-ci: http://stackoverflow.com/questions/tagged?tagnames=ioc%2bc%23&sort=votes http://stackoverflow.com/questions/tagged? tagnames = plugins% 2bc% 23 & sort = votes – jmservera

Répondre

3

En général, vous pouvez regarder autour où vous attendez plugins, charger les assemblées et chercher certaines classes. Habituellement, les plugins se font connaître en développant une sorte de classe de base de plugin ou en implémentant une interface.

Une autre option serait MEF qui sera également partie de .NET 4, mais les versions preview fonctionnent sur le framework .NET en cours, aussi.

+0

MEF a été autour pendant un certain temps, et fonctionne sur 3,5, voire 3,0. – Jay

+0

@Jay: Ai-je dit quelque chose à ce sujet * pas * en cours d'exécution actuellement? Clarifier, cependant. Cependant, je ne suis pas entièrement sûr de la qualité de l'utilisation des versions de prévisualisation dans les applications. Je l'ai fait une fois et maintenant l'API a changé un peu. – Joey

1

Dans les applications .Net, nous pouvons utiliser AppDomain et AppDomain.CurrentAppDomain pour charger des assemblys de manière dynamique dans notre application. Le problème est que vous pouvez décharger un assembly une fois chargé dans un AppDomain. Il existe une solution pour résoudre ce problème. vous pouvez charger ce type d'assemblages dans un AppDomain différent et le décharger quand vous ne voulez pas ces assemblys. Mais cette approche est très compliquée car passer des objets entre deux assemblys dans deux AppDomain différents n'est pas si simple.

+0

Je pense que vous vouliez dire "peut * PAS * charger" au lieu de "... peut charger ..." –

+0

Je voulais dire que vous pouvez décharger l'autre AppDomain – Beatles1692

+0

Passer des objets ce n'est pas si facile et doit être fait avec beaucoup de soin , il est très facile de faire une petite erreur et de charger silencieusement l'ensemble du domaine principal. – jmservera

Questions connexes