【问题标题】:Assembly Loading, Type Creation & Caching程序集加载、类型创建和缓存
【发布时间】:2011-11-30 11:58:41
【问题描述】:

我正在尝试编写类似ObjectFactory 的东西,给定程序集的路径和该程序集中的类型名称,使用反射返回相同类型的实例。由于我需要对几个不同程序集中的类型重复执行此操作,我应该在每次需要给定类型的新实例时使用Assembly.LoadFrom,还是应该以某种方式缓存生成的Assembly 对象和该类型的委托创建方法?

【问题讨论】:

  • 我不知道这是否对你的性能有足够的好处,但即使你需要密切关注缓存的有效性,即它指向磁盘上的汇编文件,你如果文件发生更改,可能需要监视这些文件并使您的缓存引用无效

标签: c# reflection .net-3.5 assembly-loading


【解决方案1】:

不,你不需要,如果不是设计决定的话。您可以在某个 Assembly 类型对象中保存对内存中程序集的引用。

【讨论】:

    【解决方案2】:

    每次都调用Assembly.LoadFrom 会很慢。

    我建议,如果您想沿着构建自己的工厂类的道路前进,请为您正在激活的类缓存 Type 实例。

    更好的是,我建议查看依赖注入框架。如果您不熟悉依赖注入 (DI),请参阅 http://en.wikipedia.org/wiki/Dependency_injection

    大多数框架至少会提供对象工厂、类型缓存并会自动解析构造函数依赖项。这很棒,因为您不必重新发明轮子,而且如果您愿意,您可以在所有应用程序中重复使用相同的方法。

    如果您有意经历构建对象工厂的过程,那么我建议您看看这些开源实现,因为它们是 DI 如何运作良好的绝佳示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多