C# 程序集加载、类型创建和;缓存

C# 程序集加载、类型创建和;缓存,c#,reflection,.net-3.5,assembly-loading,C#,Reflection,.net 3.5,Assembly Loading,我试图编写类似于ObjectFactory的东西,给定程序集的路径和该程序集中某个类型的名称,它使用反射返回同一类型的实例。由于我需要对多个不同程序集中的类型重复执行此操作,所以每次我需要给定类型的新实例时,我是应该使用Assembly.LoadFrom,还是应该以某种方式缓存生成的Assembly对象和类型创建方法的委托?不需要,如果不是由设计决定。您可以在某个类型对象内保存对内存中程序集的引用。每次调用程序集。LoadFrom将是一种缓慢的方法 我建议,如果您想继续构建自己的工厂类,您可以为

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

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

每次调用
程序集。LoadFrom
将是一种缓慢的方法

我建议,如果您想继续构建自己的工厂类,您可以为正在激活的类缓存
Type
实例

更好的是,我建议看一下依赖注入框架。如果您不熟悉依赖项注入(DI),请参阅

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

如果您有目的地经历构建对象工厂的过程,那么我建议您无论如何都要看看这些开源实现,因为它们是DI如何工作的好例子

  • 统一应用程序块-

  • 结构图-

  • 卡斯尔温德索-

  • Ninject-


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