如何在Autofac模块之间共享程序集引用
本文关键字:之间 共享程序集 引用 模块 Autofac | 更新日期: 2023-09-27 18:19:19
在我的应用程序中,我通常会有多个autofac模块,其中许多模块将执行一些检索汇编引用的工作,例如Assembly.GetExecutingAssembly()
或builder.RegisterAssemblyTypes(assemblyRef)
等。通常不同的模块将检索相同的程序集,因此假设在反射中存在开销,那么是否可以在模块之间共享程序集引用以提高效率?
或者,我正在尝试优化一些不需要优化的东西吗?
跨程序集的反射开销非常小-这与。net 1.1中使用的方式不同。特别是在应用启动时一次性注册的意义上,你正在踏入微优化的领域。
如果您关心反射性能,我建议您实际测量它,然后尝试执行某种额外的引用缓存,并查看差异。我敢打赌,您实际上并没有看到显著的节省——无论如何,这不足以证明额外的应用程序复杂性和更紧密的耦合是合理的。
你可以做的一件事很简单,就是在你的模块中添加一个构造函数,它接受它应该使用的程序集列表。
public class ScanningModule : Module
{
private IEnumerable<Assembly> _assemblies;
public ScanningModule(IEnumerable<Assembly> assemblies)
{
this._assemblies = assemblies;
}
protected override void Load(ContainerBuilder builder)
{
builder.RegisterAssemblyTypes(this._assemblies)...
}
}
注册模块时,将程序集传递给它。
var assemblies = ScanForTheAssemblies();
var builder = new ContainerBuilder();
builder.RegisterModule(new ScanningModule(assemblies));
...
var container = builder.Build();
但是,我不确定您是否会看到一个主要的性能提高,特别是因为它只发生一次。