【问题标题】:Calling a DLL with reflection and configuration dependencies调用具有反射和配置依赖关系的 DLL
【发布时间】:2012-09-28 16:21:23
【问题描述】:

我有一个通过反射调用其他库中的方法的服务。但是,其中一些库具有外部依赖项,例如有时用于执行其工作的 app.config 文件。

是否有任何关于如何做到这一点的最佳实践,或任何可以帮助解决这种情况的库?

例如:如果我的服务应该在方法 foo() 上调用外部 dll,则 foo() 会使用 app.config 获取字符串列表,但直接与反射一起使用时会崩溃。

【问题讨论】:

  • @yms:不完全是,因为服务也会有自己的配置文件,但可能需要从几个读取到它的“配置容器”
  • 也许您可以在单独的 Appdomain 中加载 dll 并使用 msdn.microsoft.com/en-us/library/…
  • 感谢 Amit,这是对进一步研究的有用建议
  • 恕我直言,单独的 Appdomain 可能更适合这种情况,因为要调用的代码是外部的。该代码的失败不应导致整个服务瘫痪。但是,如果您不想那样做,@yms 指向的帖子(尽管它很老套,如果内部实现在未来的 .net 版本中发生更改可能会停止工作)仍然对您有用。您可以使用公认的解决方案,例如 // 使用默认的 app.config。 using(AppConfig.Change(tempFileName)) { // tempFileName 中的 app.config 在内部使用时使用 // 调用外部方法 }

标签: c# asp.net reflection dll configuration


【解决方案1】:

您必须创建一个新的 AppDomain 来调用您的外部应用程序。

定义一个接口以实现您的外部应用程序使用。

创建一个从 MarshallByRefObject 派生的类并标记为可序列化并实现对外部应用程序的调用。

定义一个没有足够设置(配置文件等)的 AppDomain

CreateInstanceAndUnwrap 实现为你接口和调用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 2014-09-15
    • 2020-05-05
    • 1970-01-01
    相关资源
    最近更新 更多