我现在正在玩Microsoft Unity 2,并且需要知道是否可以配置容器以便从文件系统加载程序集,而不是必须将其配置为从配置文件加载(其中包含所有容器)映射到正确的程序集)或以编程方式注册类型对象。我需要这个基本上加载插件。所有插件都实现了相同的合同接口。我想要实现的是我可以在主应用程序文件夹中删除一个新的程序集(插件),并由Unity自动发现。是可能的还是我需要使用MEF?
非常感谢任何帮助,非常感谢。
答案 0 :(得分:3)
Unity不支持开箱即用的行为。但要实现它并不困难。
只要您在插件文件夹中删除新程序集,FileSystemWatcher就可以通知您的应用程序。那么这只是一个约定的问题,你用这个新文件做什么。使用Assembly.Load加载DLL。然后,您可以扫描它以实现您的界面
assembly.GetExportedTypes().Where(t => typeof(IMyInterface).IsAssignableFrom(t))
然后您需要使用容器注册您的实现。
由于此服务是您的基础架构的一部分,我认为可以在那里引用您的容器,我宁愿避免使用它。