c# - Microsoft Unity 和动态类型/程序集加载

标签 c# unity-container

我现在正在使用 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/

相关文章:

c# - Windows 窗体复选框已更改还是已更新?

c# - SOLID-原则的尝试,实不实?

c# - 从列表中选择不同数量的项目组合

c# - 使用 Unity IoC 容器解析 C# 中的包装类

c# - PRISM:使用 MVVM,如何解析或注入(inject)构造函数对象?

c# - 为什么 ComputeHash 的行为不是确定性的?

c# - 为什么方法不会从 LINQ Where 方法中执行

.net - 优先注册开放泛型

c# - 如何从配置文件加载统一设置?

asp.net-mvc - 使用Unity动态注入(inject)构造函数参数