我现在正在使用 Microsoft Unity 2,需要知道是否可以配置一个容器,以便它从文件系统加载程序集,而不是必须将其配置为从配置文件(其中包含所有内容)加载到正确程序集的映射)或以编程方式注册类型对象。我需要这个来加载插件。所有插件都实现了相同的合约接口(interface)。我想要实现的是,我可以在主应用程序文件夹中放置一个新的程序集(插件),并且 Unity 会自动发现它。这可能吗,还是我需要使用 MEF?
非常感谢任何帮助,非常感谢。
最佳答案
Unity 不支持这种开箱即用的行为。但实现起来并不困难。
一个FileSystemWatcher每当您将新程序集放入插件文件夹中时,都可以通知您的应用程序。那么这只是一个约定问题,即您如何处理该新文件。使用Assembly.Load加载你的DLL。然后您可以扫描它以查找接口(interface)的实现
assembly.GetExportedTypes().Where(t => typeof(IMyInterface).IsAssignableFrom(t))
然后您需要向容器注册您的实现。
由于此服务是您的基础设施的一部分,我认为可以在那里引用您的容器,否则我宁愿避免。
关于c# - Microsoft Unity 和动态类型/程序集加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9064286/