【问题标题】:C# Dynamically load assembliesC# 动态加载程序集
【发布时间】:2014-03-18 20:03:15
【问题描述】:

我有一个解决方案,其中有许多具体实现,每个都在他们自己的类库中,它们都实现了我构建的四个主要接口之一。我还为每个接口创建了一个工厂对象来动态加载请求的对象。即

public static IDataIngestorFormat GetDataIngestionFormat(string typeName, IDataIngestor di)
{
        Type format = Type.GetType(typeName);
        object formatInstance = Activator.CreateInstance(format, di);
        IDataIngestorFormat instance = formatInstance as IDataIngestorFormat;
        return instance;
} 

在我开始使用这些对象之前,一切都按预期工作。我为每个接口和具体对象以及需要访问的 WCF REST 服务和 API 层都有一个单元测试项目,但是除非我将具体对象(带有 Post Build Event)复制到位于同一解决方案中的每个客户端项目的输出路径。

现在我的问题 - 这种方法有效,但我希望不必记住每次创建新的具体实现时都将这些添加到我的所有客户项目中。

有没有一种简单的方法来实现这一点,还是我每次添加新的具体实现时都必须记住访问我的所有客户项目?

【问题讨论】:

  • 你不能将它们作为资源嵌入吗?
  • 请注意,您可能至少要重新创建以下之一:MEF 和 dependency injection frameworks,如 Unity。考虑使用现有库来配置/管理运行时依赖项。
  • 感谢您的反馈 - 没有听说过 MEF,但乍一看,这看起来很有趣。也不知道添加为资源的可能性,但我想通过这种方法我仍然需要访问每个客户端应用程序?
  • Alexei,您的评论很到位 - MEF / DI 看起来非常适合这个。请随意将此作为答案,我将其标记为已解决

标签: c# dynamic load assemblies


【解决方案1】:

如果您可以使用命名约定来保证每个客户端程序集和相关单元测试程序集的名称唯一,那么只需更改构建输出路径,以便将所有内容构建到顶级构建目录中。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多