MEF: What if I have multiple exports but need only one import?

◇◆丶佛笑我妖孽 提交于 2019-12-21 03:37:08

问题


I'm trying to wrap my mind around MEF. There is one thing I don't understand.

Assume that I have an interface, named ISomething, which is a contract, and I have more than one assemblies in a folder that contains my application, and I have no idea how many ISomething implementations are in them, or which one contains one.

If I create a host application in which I use MEF, and would like to get an ISomething, but only one, how does MEF decide which implementation it will give me?

Or, similarly to a common IoC container, how do I tell it which implementation should it use?

Thanks in advance for your answers.


回答1:


See this blog post for a discussion of this issue and some of the options you have. Also, Glenn Block has a blog post describing how to customize the container behavior with defaults.




回答2:


In the case of MEF, if you have many Exports that will satisfy an Import, you have two options:

  1. Change your Import around to use [ImportMany]. Decide, at runtime, which of the Imports to use for your contract, potentially just picking the first, or one at random.
  2. Use [ImportMany] in conjunction with Metadata in order to decide which Import to use.


来源:https://stackoverflow.com/questions/1876064/mef-what-if-i-have-multiple-exports-but-need-only-one-import

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!