使用IoC解析动态加载的类型

时间:2009-11-10 17:04:09

标签: c# plugins domain-driven-design ioc-container

我在.NET 2.0中使用Domain Driven Design编写了一个程序,我正在尝试为它实现一个插件框架。

我已经实现了几种类型的插件:

  • 域名插件

    • 由一个或多个域类组成的域聚合
    • 一个或多个View / Presenter对,用于显示聚合
    • 的实例
    • 特定于域聚合的导入/导出服务
    • 存储库类
  • 服务插件

    • 数据库插件(嵌入式或远程)
    • 一般导入/导出服务(简历,xml,竞争对手的数据格式等)

如您所见,某些插件触及每一层架构。您可以说域插件是微型应用程序,它们仅依赖于主应用程序来提供运行的框架。最终目标是让用户只购买和下载他们需要的插件。我首先将它们写成静态依赖项,因为我没有实现动态加载它们的机制。现在我正试图解决动态加载问题。

我正在尝试使用IoC容器来管理依赖项,但我很难找到如何查找和加载插件。除了每个插件公开给主应用程序的接口之外,每个插件的类也有自己的接口,用于彼此通信。

我正在使用Castle Windsor作为我的IoC容器,并希望在应用程序和每个插件中利用其自动装配功能。

我如何:

  1. 查找并加载到特定接口的Windsor实现
  2. 确保Windsor解析正确的
  3. 如果你认为我正在以错误的方式解决这个问题,请随意说出来。我还有时间在截止日期前更改设计。

2 个答案:

答案 0 :(得分:3)

我注意到我确实完全了解你,但考虑看MEF(http://mef.codeplex.com/

答案 1 :(得分:3)

您可以使用Managed Extensibility Framework之类的东西在运行时发现和枚举插件。然后,插件可以在发现它们时使用您的IoC容器注册必要的类型。